本文介绍将数据从OSS导入至图数据库GDB的完整流程。
前提条件
- 已创建图数据库GDB实例,创建方法,请参见创建主实例。
- 已创建OSS的Bucket,创建方法,请参见控制台创建存储空间。
- 已获取服务关联角色的ARN(arninfo)信息,获取方法,请参见授权GDB访问OSS。
- 已获取图数据库GDB的连接地址和端口,获取方法,请参见获取图数据库GDB实例的信息。
如果您使用本地客户端进行导入操作,连接时需要使用外网地址,申请外网地址的方法,请参见申请外网地址。
- 已创建数据库账号,创建方法,请参见创建账号。
- 已将需要访问图数据库GDB的客户端IP地址添加到白名单中,设置白名单的方法,请参见设置白名单。
准备测试数据
本文将使用air-routes数据集作为测试数据,图数据库GDB的数据分为点文件和边文件,下载链接如下:
说明 进入点文件和边文件网页后,单击右键,然后单击另存为保存为CSV格式文件。
您也可以使用其它数据进行导入测试,图数据库GDB对CSV数据的文件格式有要求,具体要求,请参见CSV数据文件格式。
上传数据至OSS
以下内容为通过OSS控制台上传数据。如果您需要通过ossutil工具上传数据,请参见使用ossutil工具上传数据文件。
- 登录OSS管理控制台。
- 单击左侧导航栏的Bucket列表,然后单击目标Bucket名称。
- 单击上传文件。
- 在上传文件面板,配置文件存储目录、读写权限并选择待上传文件。
- 单击上传文件。
完成上传后,您可以返回文件管理页面查看文件存储路径,在导入数据到图数据库GDB时需要使用该路径。
如上图所示,gdbOssDemo/node路径存放了点文件,gdbOssDemo/edge路径存放了边文件,假如Bucket名称为gdbbucket
,则点文件和边文件的OSS路径分别为:
- 点文件
oss://gdbbucket/gdbOssDemo/node/
- 边文件
oss://gdbbucket/gdbOssDemo/edge/
导入数据到图数据库GDB
以下内容仅为导入数据到图数据库GDB的示例步骤,更多参数说明,请参见使用curl命令导入数据文件。
- 在客户端(例如ECS或本地客户端)上执行
curl
命令,导入点文件,示例如下:通过ramRoleArn与 accessKey和secretKey选择一个即可。curl -u gdb_user:PassWord -X POST \ -H 'Content-Type: application/json' \ http://gds-*****.graphdb.rds.aliyuncs.com:8182/loader -d ' { "source" : "oss://gdbbucket/gdbOssDemo/node/", "ramRoleArn" : "acs:ram::1***************:role/aliyunserviceroleforgdb" }'
使用ramRoleArn方法进行数据导入时,导入任务受临时安全令牌(STS)有效时间的限制,不能超过10小时,超过会导致任务中断(即数据不能全部导入)。如果您需要导入的数据量较大,建议您采用accessKey或secretKey的方法导入。curl -u gdb_user:PassWord -X POST \ -H 'Content-Type: application/json' \ http://gds-*****.graphdb.rds.aliyuncs.com:8182/loader -d ' { "source" : "oss://gdbbucket/gdbOssDemo/node/", "accessKey": "XXXXXX", "secretKey": "XXXXXX" }'
说明 请将以上示例中的参数替换为您真实的数据库信息,使用本地客户端连接时请使用外网地址。图数据库GDB导入程序检查参数无误后,将返回导入任务IDloadId,示例如下:
{ "status" : "200 OK", "payload" : { "loadId" : "552617AF-4F1E-4CD8-9533-************" } }
- 在客户端执行
curl
命令,导入边文件,示例如下:curl -u gdb_user:PassWord -X POST \ -H 'Content-Type: application/json' \ http://gds-*****.graphdb.rds.aliyuncs.com:8182/loader -d ' { "source" : "oss://gdbbucket/gdbOssDemo/edge/", "ramRoleArn" : "acs:ram::1***************:role/aliyunserviceroleforgdb" }'
说明 请将以上示例中的参数替换为您真实的数据库信息,使用本地客户端连接时请使用外网地址。图数据库GDB导入程序检查参数无误后,将返回导入任务IDloadId,示例如下:
{ "status" : "200 OK", "payload" : { "loadId" : "552617AF-4F1E-4CD8-9533-************" } }
成功上传后,您可以通过loadId查看导入任务的任务状态,示例如下:
curl -u gdb_user:PassWord -X GET 'http://gds-*****.graphdb.rds.aliyuncs.com:8182/loader/<loadId>'
常见问题
- Q:导入相同的文件后,系统返回
LOAD_NOT_SUPPORT TO RESUME LOAD
错误。A:需要将之前导入数据生成的loadId删除,删除语句如下:
curl -u gdb_account:******** -X DELETE 'http://gds-123.graphdb.rds.aliyuncs.com:****/loader/552617AF-4F1E-4CD8-9533-A2EC154688DC'
如果有很多loadId,您可以使用以下脚本批量删除:
#!/bin/bash GDB_HOST=YOU_GDB_HOST GDB_PORT=YOU_GDB_PORT GDB_USER=YOUR_GDB_USER GDB_PASSWORD=YOUR_GDB_PASSWORD curl -u "${GDB_USER}:${GDB_PASSWORD}" "http://${GDB_HOST}:${GDB_PORT}/loader"| python3 -c 'import json,sys;print("\n".join(json.load(sys.stdin)["payload"]["loadIds"]))'| while read TASK; do echo delete task: $TASK curl -u "${GDB_USER}:${GDB_PASSWORD}" -XDELETE "http://${GDB_HOST}:${GDB_PORT}/loader/${TASK}" done curl -u "${GDB_USER}:${GDB_PASSWORD}" "http://${GDB_HOST}:${GDB_PORT}/loader"
- Q:导入文件时,提示
Commit record Error(21-0)
错误。A:您需要将导入参数failOnError修改为false,修改操作,请参见导入接口介绍。
更多错误信息,请参见错误信息列表。