本文介绍将数据从OSS导入至图数据库GDB的完整流程。

前提条件

  • 已创建图数据库GDB实例,创建方法,请参见创建主实例
  • 已创建OSS的Bucket,创建方法,请参见控制台创建存储空间
  • 已获取服务关联角色的ARN(arninfo)信息,获取方法,请参见授权GDB访问OSS
  • 已获取图数据库GDB的连接地址和端口,获取方法,请参见获取图数据库GDB实例的信息

    如果您使用本地客户端进行导入操作,连接时需要使用外网地址,申请外网地址的方法,请参见申请外网地址

  • 已创建数据库账号,创建方法,请参见创建账号
  • 已将需要访问图数据库GDB的客户端IP地址添加到白名单中,设置白名单的方法,请参见设置白名单

准备测试数据

本文将使用air-routes数据集作为测试数据,图数据库GDB的数据分为点文件和边文件,下载链接如下:

说明 进入点文件和边文件网页后,单击右键,然后单击另存为保存为CSV格式文件。

您也可以使用其它数据进行导入测试,图数据库GDB对CSV数据的文件格式有要求,具体要求,请参见CSV数据文件格式

上传数据至OSS

以下内容为通过OSS控制台上传数据。如果您需要通过ossutil工具上传数据,请参见使用ossutil工具上传数据文件

  1. 登录OSS管理控制台
  2. 单击左侧导航栏的Bucket列表,然后单击目标Bucket名称。
  3. 单击上传文件
  4. 上传文件面板,配置文件存储目录、读写权限并选择待上传文件。
  5. 单击上传文件

完成上传后,您可以返回文件管理页面查看文件存储路径,在导入数据到图数据库GDB时需要使用该路径。

导入数据到OSS

如上图所示,gdbOssDemo/node路径存放了点文件,gdbOssDemo/edge路径存放了边文件,假如Bucket名称为gdbbucket,则点文件和边文件的OSS路径分别为:

  • 点文件
    oss://gdbbucket/gdbOssDemo/node/
  • 边文件
    oss://gdbbucket/gdbOssDemo/edge/

导入数据到图数据库GDB

以下内容仅为导入数据到图数据库GDB的示例步骤,更多参数说明,请参见使用curl命令导入数据文件

  1. 在客户端(例如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-************"
      }
    }
  2. 在客户端执行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,修改操作,请参见导入接口介绍

更多错误信息,请参见错误信息列表