阿里云首页 图数据库 GDB

OSS数据导入示例

本文介绍如何将OSS数据导入到GDB实例。

环境准备

请保证以下所有操作都是在与GDB相同Region的ECS上执行。

在开始之前,您必须准备以下内容:

  • 一个GDB数据库实例。有关创建GDB数据库实例的信息,请参考快速入门

  • 一个与GDB实例在相同Region的OSS存储Bucket。您可以使用已有的Bucket,如果没有可以创建Bucket

  • 授权GDB访问您OSS存储空间的权限,参照导入授权完成角色创建,您也可以准备有OSS访问权限的账号AccessKey信息。导入程序只需要对您OSS数据有读取访问权限。

  • 需要导入到GDB实例的CSV数据文件,如果您还没有构造测试数据,可以使用air-routes数据集,下载CSV格式的点文件边文件

将数据导入到GDB实例中

  • 将准备的数据上传到OSS的存储Bucket中,Bucket必须与GDB实例在相同Region。

    可以参照OSS上传文件完成待导入的CSV格式数据文件上传,下面使用ossutil上传air-routes数据集到OSS,你也可以直接在OSS控制台通过页面操作上传。

# 点文件
./ossutil cp air-routes-latest-nodes.csv oss://{mybucket}/air-routes/air-routes-latest-nodes.csv
# 边文件
./ossutil cp air-routes-latest-edges.csv oss://{mybucket}/air-routes/air-routes-latest-edges.csv
  • 从命令行发送HTTP请求启动导入任务。替换下面大括弧中的参数,包括GDB地址、端口、OSS文件路径和授权资源名称,以及访问实例的用户名密码。

注意

  • 下面使用大括弧表示可变参数,替换您自己实例参数后,不需要使用大括弧再括起来。

  • 如果下面curl命令没有返回任何信息,通常是账号信息不对,注意特殊字符的转义。可以添加-i参数查看返回Header。

GDB实例地址和端口可以从实例基本信息页面查看,分别对应内网地址和内网端口。

{mygdb-endpoint}:8182
# 示例:内网GDB实例的地址信息
gds-uf6j53c35ko13u78129990.graphdb.rds.aliyuncs.com:8182
  • 示例OSS文件路径分别使用上述air-routes数据集点/边文件的路径。

    授权资源名称参照导入授权获取,您也可以提供AccessKey参数,示例使用授权后的以下ARN:

ramRoleArn : acs:ram::{my-uid}:role/{role-name}
# 示例:账号授权信息(仅格式参考)
ramRoleArn : acs:ram::1927679924892519:role/aliyungdbaccessingossrole
  • 发送导入数据命令:

curl -u {username}:{password} -X POST \
  -H 'Content-Type: application/json' \
  http://{mygdb-endpoint}:8182/loader -d '
  {
    "source" : "oss://{mybucket}/air-routes/air-routes-latest-nodes.csv",
    "ramRoleArn" : "acs:ram::{my-uid}:role/{role-name}",
  }'
# 示例:发送导入命令到GDB实例,下面命令使用实际信息替换可变参数,仅作格式参考
curl -u gdbaccount:pd123NOTUSE -X POST -H 'Content-Type: application/json'  http://gds-uf6j53c35ko13u78129990.graphdb.rds.aliyuncs.com:8182/loader -d '{"source" : "oss://graphoss-cnshanghai/air-routes/air-routes-latest-nodes.csv", "ramRoleArn" : "acs:ram::1927679924892519:role/aliyungdbaccessingossrole"}'
注意

待导入点完成后,提供source为边文件路径,再启动一个边的导入任务。

  • GDB导入程序检查参数正确后返回任务id,例如:

{
  "status" : "200 OK",
  "payload" : {
      "loadId" : "552617AF-4F1E-4CD8-9533-A2EC154688DC"
  }
}
  • 使用上述步骤的id获取导入任务的状态:

curl -u {username}:{password} -X GET 'http://{mygdb-endpoint}:8182/loader/552617AF-4F1E-4CD8-9533-A2EC154688DC'
# 示例:查询GDB实例的导入任务状态
curl -u gdbaccount:pd123NOTUSE -X GET 'http://gds-uf6j53c35ko13u78129990.graphdb.rds.aliyuncs.com:8182/loader/552617AF-4F1E-4CD8-9533-A2EC154688DC'

如果返回结果有列出错误,请参考错误信息列表了解更详细内容。

  • (可选)使用上述步骤的id取消导入任务:

curl -u {username}:{password} -X DELETE 'http://{mygdb-endpoint}:8182/loader/552617AF-4F1E-4CD8-9533-A2EC154688DC'
# 示例:取消GDB实例的导入任务
curl -u gdbaccount:pd123NOTUSE -X DELETE 'http://gds-uf6j53c35ko13u78129990.graphdb.rds.aliyuncs.com:8182/loader/552617AF-4F1E-4CD8-9533-A2EC154688DC'

命令会在取消成功后返回HTTP状态码200 OK,取消正在后台执行的任务会阻塞等待任务停止再返回。

任务中已经导入到GDB实例的点或边数据不会回滚,将保留在GDB中。

导入工具

除使用curl命令发送请求外,您也可以使用GDB工具集中的GdbLoader脚本完成以上示例,具体使用可以参考脚本说明。

注意

  • 下面使用大括弧括起来的可变参数也需要替换成您的GDB实例相关参数,替换后同样需要去掉大括弧。

  • 如果使用外网地址访问GDB实例,需要修改端口号8182为对应的外网端口号,通常是3734

python GdbLoader.py --host {mygdb-endpoint} --port 8182 --username {username} --password {password} --todo add_task --source oss://{mybucket}/air-routes/air-routes-latest-nodes.csv --arn acs:ram::{my-uid}:role/{role-name}
# 添加导入边任务
python GdbLoader.py --host {mygdb-endpoint} --port 8182 --username {username} --password {password} --todo add_task --source oss://{mybucket}/air-routes/air-routes-latest-edges.csv --arn acs:ram::{my-uid}:role/{role-name}
# 查询任务详情
python GdbLoader.py --host {mygdb-endpoint} --port 8182 --username {username} --password {password} --todo get_task --loaderId 552617AF-4F1E-4CD8-9533-A2EC154688DC
# 取消任务
python GdbLoader.py --host {mygdb-endpoint} --port 8182 --username {username} --password {password} --