全部產品
Search
文件中心

DataWorks:Graph Database(GDB)資料來源

更新時間:Mar 22, 2025

Graph Database資料來源為您提供讀取和寫入Graph Database雙向通道的功能,本文為您介紹DataWorks的Graph Database資料同步的能力支援情況。

使用限制

離線讀

離線寫

  • 匯出GDB需要配置點任務和邊任務,分別匯出點資料和邊資料。

  • 匯出任務根據點或邊的類型名稱遍曆資料,您需要確保待匯出資料的類型名稱。

  • GDB中點和邊的主鍵ID欄位是字串類型,請設定匯出為STRING類型。如果配置LONG等數實值型別,GDB Reader會轉換為配置的目標類型,但轉換失敗時會丟失該記錄。

  • 您需要配置GDB匯出的屬性值為儲存類型。如果儲存類型和配置類型不一致,GDB Reader會轉換為目標類型,但可能會轉換失敗導致該記錄丟失。

  • 匯出點SET屬性的一個值時,不能保證多次匯出都是同一個值。

  • 匯出所有屬性使用JSON格式輸出時,僅包含一個屬性值的SET屬性會被作為普通屬性輸出。

  • 如果未對樣本的欄位名或枚舉值進行特別說明,請注意大小寫敏感。

  • GDB服務端僅支援UTF-8編碼格式,匯出的資料均為UTF-8編碼格式。

  • GDB需要升級至1.0.20或更高版本才支援SET屬性。使用SET屬性時,請確認執行個體的版本。

  • 必須先運行點的同步任務,運行成功後,才可以運行邊的同步任務。

  • 點有以下約束規則:

    • 點必須具備類型名(即點名稱,對應label)。

    • 點的主鍵ID為必選,必須保證在點範圍內唯一,且類型必須是STRING(如果不是STRING類型,GDB Writer外掛程式會強制轉換)。

    • 請謹慎選擇點的主鍵映射規則idTransRule。如果選擇none,需要保證點的ID在全域點的範圍內唯一。

  • 邊有以下約束規則:

    • 邊必須具備類型名(即邊名稱,對應label)。

    • 邊的主鍵ID為可選。

      • 如果填寫,則需要保證在全域邊界範圍內唯一。

      • 如果不填寫,則GDB服務端預設產生一個UUID,類型必須是STRING(如果不是STRING類型,GDB Writer外掛程式會強制轉換)。

    • 請謹慎選擇邊的主鍵映射規則idTransRule。如果選擇none,需要保證邊的ID在全域點邊的範圍內唯一。

    • 邊必須選擇srcIdTransRuledstIdTransRule,且必須和匯入點時選擇的idTransRule一致。

  • 樣本的欄位名或枚舉值,如果沒有特殊說明,均為大小寫敏感。

  • 目前GDB服務端僅支援UTF-8編碼格式,要求來來源資料均為UTF-8編碼格式。

  • 由於網路限制,運行Data Integration任務時,只能使用Serverless資源群組(推薦)獨享Data Integration資源群組,請您提前購買並綁定GDB執行個體所在的Virtual Private Cloud。

建立資料來源

在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源詳細的配置參數解釋可在配置介面查看對應參數的文案提示

資料同步任務開發

資料同步任務的配置入口和通用配置流程可參見下文的配置指導。

單表離線同步任務配置指導

附錄:指令碼Demo與參數說明

離線任務指令碼配置方式

如果您配置離線任務時使用指令碼模式的方式進行配置,您需要按照統一的指令碼格式要求,在任務指令碼中編寫相應的參數,詳情請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下資料來源的參數配置詳情。

Reader指令碼Demo

配置寫入GDB的資料同步作業時,請分別配置點和邊:

  • 點配置樣本

    {
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                }
            ]
        },
        "setting":{
            "errorLimit":{
                "record":"100"  //錯誤記錄數,表示髒資料的最大容忍條數。
            },
            "jvmOption":"",
            "speed":{
                "concurrent":3,
                "throttle":true,///當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
                "mbps":"12"//限流,此處1mbps = 1MB/s。
            }
        },
        "steps":[
            {
                "category":"reader",
                "name":"Reader",
                "parameter":{
                    "host": "gdb-xxxxxx.aliyuncs.com", //GDB執行個體的串連地址。
                    "port": 8182, //GDB執行個體的串連連接埠。
                    "username": "gdb", //GDB執行個體的使用者名稱。
                    "password": "gdb", //GDB執行個體使用者名稱對應的密碼。
                    "labelType": "VERTEX", // Label類型,使用VERTEX表示點。
                    "labels": ["label1", "label2"],  // Label名的列表,為空白表示匯出所有的點。
                    "column": [
                        {
                            "name": "id",               // 欄位名。
                            "type": "string",           // 欄位類型。
                            "columnType": "primaryKey"  // 欄位分類,表示點的主鍵ID,GDB中是STRING類型。
                        },
                        {
                            "name": "label",              // 欄位名。
                            "type": "string",             // 欄位類型。
                            "columnType": "primaryLabel"  // 欄位分類,表示點的Label名,GDB中是STRING類型。
                        },
                        {
                            "name": "age",                   // 屬性欄位名。
                            "type": "int",                   // 屬性欄位類型。
                            "columnType": "vertexProperty"   // 欄位分類,表示點的屬性,GDB中基礎類型屬性。
                        }
                    ]
                },
                "stepType":"gdb"
            },
            {
                "category":"writer",
                "name":"Writer",
                "parameter":{
                    "print": true
                },
                "stepType":"stream"
            }
        ]
    }
  • 邊配置樣本

    {
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                }
            ]
        },
        "setting":{
            "errorLimit":{
                "record":"100"  //錯誤記錄數,表示髒資料的最大容忍條數。
            },
            "jvmOption":"",
            "speed":{
                "concurrent":3,
                "throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
                "mbps":"12"//限流,此處1mbps = 1MB/s。
            }
        },
        "steps":[
            {
                "category":"reader",
                "name":"Reader",
                "parameter":{
                    "host": "gdb-xxxxxx.aliyuncs.com", //GDB執行個體的串連地址。
                    "port": 8182, //GDB執行個體的串連連接埠。
                    "username": "gdb", //GDB執行個體使用者名稱。
                    "password": "gdb", //GDB執行個體使用者名稱對應的密碼。
                    "labelType": "EDGE", // Label類型,VERTEX表示點。
                    "labels": ["label1", "label2"],  // Label名列表,為空白表示匯出所有的邊。
                    "column": [
                        {
                            "name": "id",               // 欄位名。
                            "type": "string",           // 欄位類型。
                            "columnType": "primaryKey"  // 欄位分類,表示邊的主鍵ID,GDB中是STRING類型。
                        },
                        {
                            "name": "label",              // 欄位名。
                            "type": "string",             // 欄位類型。
                            "columnType": "primaryLabel"  // 欄位分類,表示邊的Label名,GDB中是STRING類型。
                        },
                        {
                            "name": "srcId",               // 欄位名。
                            "type": "string",              // 欄位類型。
                            "columnType": "srcPrimaryKey"  // 欄位分類,表示邊關聯點中起點的ID,GDB中是STRING類型。
                        },
                        {
                            "name": "srcLabel",               // 欄位名。
                            "type": "string",                 // 欄位類型。
                            "columnType": "srcPrimaryLabel"   // 欄位分類,表示邊關聯點中起點的Label名,GDB中是STRING類型。
                        },
                        {
                            "name": "dstId",                    // 欄位名。
                            "type": "string",                   // 欄位類型。
                            "columnType": "dstPrimaryKey"       // 欄位分類,表示邊關聯點中終點的ID,GDB中是STRING類型。
                        },
                        {
                            "name": "dstLabel",                 // 欄位名。
                            "type": "string",                   // 欄位類型。
                            "columnType": "dstPrimaryLabel"     // 欄位分類,表示邊關聯點中終點的Label名,GDB中是STRING類型。
                        },
                        {
                            "name": "weight",               // 屬性欄位名。
                            "type": "double",               // 屬性欄位類型。
                            "columnType": "edgeProperty"    // 欄位分類,表示邊的屬性。
                        }
                    ]
                },
                "stepType":"gdb"
            },
            {
                "category":"writer",
                "name":"Writer",
                "parameter":{
                    "print": true
                },
                "stepType":"stream"
            }
        ]
    }

Reader指令碼參數

參數

描述

是否必選

預設值

host

GDB執行個體的串連網域名稱。您可以在圖資料庫GDB控制台,單擊相應執行個體後的管理,查看內網地址(即host)。

port

GDB執行個體的串連連接埠。

8182

username

GDB執行個體的帳號名。

password

GDB執行個體帳號的密碼。

labels

類型名,即點或邊的名稱。支援讀取多個名稱的資料,使用數組表示,例如["label1", "label2"]。

labelType

資料的Label類型:

  • 枚舉值VERTEX表示點。

  • 枚舉值EDGE表示邊。

column

點或邊的欄位對應關係配置。

column -> name

點或邊的映射關係的欄位名。讀取屬性時必選,請提供屬性名稱。

column -> type

點或邊的映射關係的欄位實值型別:

  • 主鍵ID、類型名Label在GDB中均為STRING類型。如果您配置為STRING類型,會轉換失敗。

  • 普通屬性支援INT、LONG、FLOAT、DOUBLE、BOOLEAN和STRING等類型。

  • GDB Reader會盡量轉換讀取的資料為配置要求的類型,但轉換失敗會導致該條記錄錯誤。

column -> columnType

GDB點或邊資料對應到的點或邊的映射關係欄位,包括以下枚舉值:

  • 公用枚舉值:

    • primaryKey:表示該欄位為主鍵ID。

    • primaryLabel:表示該欄位為名稱Label。

  • 點枚舉值:

    • vertexProperty:當labelType為點時,表示該欄位為點的屬性。

    • vertexJsonProperty:當labelType為點時,表示該欄位為點的屬性的集合,使用JSON格式封裝。當配置該類型時,所有屬性會打包至該列,column中不能再包含其它屬性的類型。

      vertexJsonProperty格式如下。

      {
          "properties":[
              {"k":"name","t":"string","v":"tom","c":"set"},
              {"k":"name","t":"string","v":"jack","c":"set"},
              {"k":"sex","t":"string","v":"male","c":"single"}
          ]
      }
                                                          

      上述匯出的屬性包含多值屬性name,有兩個屬性值和一個單值屬性。如果GDB中的多值屬性僅包含一個屬性值,匯出會被當作單值屬性。

  • labelType為邊時的邊枚舉值:

    • srcPrimaryKey:表示該欄位為起點主鍵ID。

    • dstPrimaryKey:表示該欄位為終點主鍵ID。

    • srcPrimaryLabel:表示該欄位為起點名稱Label。

    • dstPrimaryLabel:表示該欄位為終點名稱Label。

    • edgeProperty:表示該欄位為邊的屬性。

    • edgeJsonProperty:表示該欄位為邊的屬性集合,使用JSON格式封裝。配置該類型時,所有屬性均會打包至該列,column中不能再包含其它屬性的類型。

      edgeJsonProperty格式如下。

      {
          "properties":[
              {"k":"name","t":"string","v":"tom"},
              {"k":"sex","t":"string","v":"male"}
      ]
      }
                                                          

      邊不支援多值屬性,無c欄位。

Writer指令碼Demo

  • 點配置樣本

    {
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                }
            ]
        },
        "setting":{
            "errorLimit":{
                "record":"100"  //錯誤記錄數,表示髒資料最大容忍條數。
            },
            "speed":{
                 "throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
                "concurrent":3, //作業並發數。
                "mbps":"12"//限流,此處1mbps = 1MB/s。
            }
        },
        "steps":[
            {
                "category":"reader",
                "name":"Reader",
                "parameter":{
                    "column":[
                        "*"
                    ],
                    "datasource":"_ODPS",
                    "emptyAsNull":true,
                    "guid":"",
                    "isCompress":false,
                    "partition":[],
                    "table":""
                },
                "stepType":"odps"
            },
            {
                "category":"writer",
                "name":"Writer",
                "parameter": {
                    "datasource": "testGDB", // 資料來源名稱。
                    "label": "person", //label名,即點名稱。
                    "srcLabel": "", // 點類型時此欄位無需關注。
                    "dstLabel": "", // 點類型時此欄位無需關注。
                    "labelType": "VERTEX", //label類型,"VERTEX"表示點。
                    "writeMode": "INSERT", //匯入ID重複時處理方式。
                    "idTransRule": "labelPrefix", //點的主鍵轉換規則。
                    "srcIdTransRule": "none", // 點類型時此欄位無需關注。
                    "dstIdTransRule": "none", // 點類型時此欄位無需關注。
                    "column": [
                        {
                            "name": "id", //欄位名。
                            "value": "#{0}", //#{0}表示取源端第1個欄位值,支援拼接,0是源端column索引號。
                            "type": "string", //欄位類型。
                            "columnType": "primaryKey" //欄位分類,primaryKey表示是主鍵。
                        }, //點的主鍵,欄位名必須是ID且類型是STRING,該記錄必須存在。
                        {
                            "name": "person_age",
                            "value": "#{1}", //#{1}表示取源端第2個欄位值,同上支援拼接。
                            "type": "int",
                            "columnType": "vertexProperty" //欄位分類,vertexProperty表示是點的屬性。
                        }, //點的屬性,支援INT、LONG、FLOAT、DOUBLE、BOOLEAN和STRING類型。
                        {
                            "name": "person_credit",
                            "value": "#{2}", //#{2}表示取源端第3個欄位值,同上支援拼接。
                            "type": "string",
                            "columnType": "vertexProperty"
                        }, //點的屬性。
                    ]
                }
                "stepType":"gdb"
            }
        ],
        "type":"job",
        "version":"2.0"
    }
  • 邊配置樣本

    {
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                }
            ]
        },
        "setting":{
            "errorLimit":{
                "record":"100" //錯誤記錄數,表示髒資料的最大容忍條數。
            },
            "jvmOption":"",
            "speed":{
                "throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
                "concurrent":3, //作業並發數。
                "mbps":"12"//限流,此處1mbps = 1MB/s。
            }
        },
        "steps":[
            {
                "category":"reader",
                "name":"Reader",
                "parameter":{
                    "column":[
                        "*"
                    ],
                    "datasource":"_ODPS",
                    "emptyAsNull":true,
                    "guid":"",
                    "isCompress":false,
                    "partition":[],
                    "table":""
                },
                "stepType":"odps"
            },
            {
                "category":"writer",
                "name":"Writer",
                "parameter": {
                    "datasource": "testGDB", // 資料來源名稱。
                    "label": "use", //label名,即邊名稱。
                    "labelType": "EDGE", //label類型,EDGE表示邊。
                    "srcLabel": "person", //起點的點名稱。
                    "dstLabel": "software", //終點的點名稱。
                    "writeMode": "INSERT", //匯入ID重複時的處理方式。
                    "idTransRule": "labelPrefix", //邊的主鍵轉換規則。
                    "srcIdTransRule": "labelPrefix", //起點的主鍵轉換規則。
                    "dstIdTransRule": "labelPrefix", //終點的主鍵轉換規則。
                    "column": [
                        {
                            "name": "id", //欄位名。
                            "value": "#{0}", //#{0}表示取源端第1個欄位值,支援拼接。
                            "type": "string", //欄位類型。
                            "columnType": "primaryKey" //欄位分類,primaryKey表示該欄位是主鍵。
                        }, //邊的主鍵,欄位名必須是ID且類型是STRING,該記錄選填。
                        {
                            "name": "id",
                            "value": "#{1}", //支援拼接,注意映射規則要與錄入點時一致。
                            "type": "string",
                            "columnType": "srcPrimaryKey" //欄位分類,srcPrimaryKey表示是起點主鍵。
                        }, //起點的主鍵,欄位名必須是ID且類型是STRING,該記錄必須存在。
                        {
                            "name": "id",
                            "value": "#{2}", //支援拼接,注意映射規則要與錄入點時一致。
                            "type": "string",
                            "columnType": "dstPrimaryKey" //欄位分類,dstPrimaryKey表示是終點主鍵。
                        }, //終點的主鍵,欄位名必須是ID且類型是STRING,該記錄必須存在。
                        {
                            "name": "person_use_software_time",
                            "value": "#{3}", //支援拼接。
                            "type": "long",
                            "columnType": "edgeProperty" //欄位分類,edgeProperty表示邊的屬性。
                        }, //邊的屬性,支援INT、LONG、FLOAT、DOUBLE、BOOLEAN和STRING類型。
                        {
                            "name": "person_regist_software_name",
                            "value": "#{4}", //支援拼接。
                            "type": "string",
                            "columnType": "edgeProperty"
                        }, //邊屬性
                        {
                            "name": "id",
                            "value": "#{5}", //支援拼接。
                            "type": "long",
                            "columnType": "edgeProperty"
                        }, //邊的屬性,欄位名是ID。與主鍵ID不同,該欄位為普通屬性,可選。
                    ]
                }
                "stepType":"gdb"
            }
        ],
        "type":"job",
        "version":"2.0"
    }

Writer指令碼參數

參數

描述

是否必選

預設值

datasource

資料來源名稱,指令碼模式支援添加資料來源,此配置項填寫的內容必須與添加的資料來源名稱保持一致。

label

類型名,即點/邊名稱。

label支援從源列中讀取,例如#{0},表示取第1欄欄位作為label名,源列索引從0開始。

labelType

label的類型:

  • 枚舉值VERTEX表示點。

  • 枚舉值EDGE表示邊。

srcLabel

  • 當label為邊時,表示起點的點名稱。

    label為邊、srcIdTransRulenone時,可以不填寫,否則為必填項。

  • label為點時,則不填。

dstLabel

  • 當label為邊時,表示終點的點名稱。

    label為邊、dstIdTransRulenone時,可以不填寫,否則為必填項。

  • label為點時,則不填。

writeMode

匯入ID重複時的處理模式。

  • 枚舉值INSERT表示會報錯,錯誤記錄數加1。

  • 枚舉值MERGE表示用新值覆蓋舊值。

INSERT

idTransRule

主鍵ID的轉換規則。

  • 枚舉值labelPrefix表示將映射的值轉換為{label名}-{源欄位}

  • 枚舉值none表示映射的值不進行轉換。

none

srcIdTransRule

label為邊時,表示起點的主鍵ID轉換規則。

  • 枚舉值labelPrefix表示將映射的值轉換為{label名}-{源欄位}

  • 枚舉值none表示映射的值不進行轉換,此時可以不填寫srcLabel

label為邊時必選

none

dstIdTransRule

label為邊時,表示終點的主鍵ID轉換規則。

  • 枚舉值labelPrefix表示將映射的值轉換為{label名}-{源欄位}

  • 枚舉值none表示映射的值不進行轉換,此時可以不填寫dstLabel

label為邊時必選

none

column

點/邊欄位對應關係配置。

  • name:點/邊的欄位名。

  • value:點/邊欄位對應的值,僅指令碼模式支援字串自訂拼接。

    • #{N}表示直接映射源端值,N為源端column索引,從0開始。

    • #{0}表示映射源端column第1個欄位。

    • test-#{0}表示源端值進行拼接轉換,#{0}值前/後可以添加固定字串。

    • #{0}-#{1}表示進行多欄位拼接,也可以在任意位置添加固定字串,例如test-#{0}-test1-#{1}-test2

  • type:點/邊欄位對應值的類型。

    主鍵ID僅支援STRING類型,GDB Writer會進行強制轉換,源ID必須保證可以轉換為STRING類型。

    普通屬性支援類型:INT、LONG、FLOAT、DOUBLE、BOOLEAN和STRING。

  • columnType:點/邊映射欄位的分類,支援的枚舉值如下所示。

    • 公用枚舉值

      primaryKey:label為點/邊時,表示該欄位是主鍵ID。

    • 點枚舉值

      • vertexProperty:label為點時,表示該欄位是點的普通屬性。

      • vertexJsonProperty:label為點時,表示是點JSON屬性,value結構請參見properties樣本。

    • 邊枚舉值

      • srcPrimaryKey:label為邊時,表示該欄位是起點主鍵ID。

      • dstPrimaryKey:label為邊時,表示該欄位是終點主鍵ID。

      • edgeProperty:label為邊時,表示該欄位是邊的普通屬性。

      • edgeJsonProperty:label為邊時,表示是邊JSON屬性,value結構請參見properties樣本。

properties樣本

{"properties":[
    {"k":"name","t":"string","v":"tom"},
    {"k":"age","t":"int","v":"20"},
    {"k":"sex","t":"string","v":"male"}
]}