本文介紹將數據從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,修改操作,請參見導入接口介紹。
更多錯誤信息,請參見錯誤信息列表。