本文介紹將數據從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,修改操作,請參見導入接口介紹

更多錯誤信息,請參見錯誤信息列表