本文為您介紹GDB Writer支持的數據類型、字段映射和數據源等參數及配置示例。

說明

使用須知

  • 必須先運行點的同步任務,運行成功后,才可以運行邊的同步任務。
  • 點有以下約束規則:
    • 點必須具備類型名(即點名稱,對應label)。
    • 點的主鍵ID為必選,必須保證在點范圍內唯一,且類型必須是string(如果不是string類型,GDB Writer插件會強制轉換)。
    • 請謹慎選擇點的主鍵映射規則idTransRule。如果選擇None,需要保證點的ID在全局點的范圍內唯一。
  • 邊有以下約束規則:
    • 邊必須具備類型名(即邊名稱,對應label)。
    • 邊的主鍵ID為可選:
      • 如果填寫,則需要保證在全局邊范圍內唯一。
      • 如果不填寫,則GDB服務端默認生成一個UUID,類型必須是string(如果不是string類型,GDB Writer插件會強制轉換)。
    • 請謹慎選擇邊的主鍵映射規則idTransRule。如果選擇None,需要保證邊的ID在全局點邊的范圍內唯一。
    • 邊必須選擇srcIdTransRule和dstIdTransRule,且必須和導入點時選擇的idTransRule一致。
  • 示例的字段名或枚舉值,如果沒有特殊說明,均為大小寫敏感。
  • 目前GDB服務端僅支持UTF-8編碼格式,要求來源數據均為UTF-8編碼格式。
  • 由于網絡限制,運行數據集成任務時,只能使用獨享資源模式

參數說明

參數 描述 是否必選 默認值
datasource 數據源名稱,腳本模式支持添加數據源,此配置項填寫的內容必須與添加的數據源名稱保持一致。
labelType 寫入數據的類型:
  • 枚舉值VERTEX表示點。
  • 枚舉值EDGE表示邊。
writeMode 導入ID重復時的處理模式:
  • 枚舉值INSERT表示寫入重復ID會報錯,錯誤記錄數加1。
  • 枚舉值MERGE表示寫入重復ID時,屬性用新值覆蓋舊值,不計入錯誤。
  • 枚舉值SKIP表示寫入重復ID時直接跳過,也不計入錯誤。
INSERT
label 類型名,即點或邊名稱。

label支持從源列中讀取,例如#{0},表示取第1列字段作為類型名,源列索引從0開始。

srcLabel 表示起點的點名稱:
  • 當寫入類型為點時,不需要填寫。
  • 當寫入類型為邊,并且srcIdTransRulenone,也不需要填寫,否則為必填項。
dstLabel 表示終點的點名稱:
  • 當寫入類型為點時,不需要填寫。
  • 當寫入類型為邊,并且srcIdTransRulenone,也不需要填寫,否則為必填項。
idTransRule 主鍵ID的轉換規則:
  • 枚舉值none表示映射的值不進行轉換,保持主鍵源字段。
  • 枚舉值labelPrefix表示將映射的值轉換為{label名}{源字段}
none
srcIdTransRule 當寫入邊類型時,表示起點主鍵ID的轉換規則:
  • 枚舉值none表示映射的值不進行轉換,保持主鍵源字段,此時可以不填寫srcLabel
  • 枚舉值labelPrefix表示將映射的值轉換為{label名}{源字段}
寫入邊類型時必選 none
dstIdTransRule 當寫入邊類型時,表示終點主鍵ID的轉換規則:
  • 枚舉值none表示映射的值不進行轉換,保持主鍵源字段,此時可以不填寫dstLabel。
  • 枚舉值labelPrefix表示將映射的值轉換為{label名}{源字段}
寫入邊類型時必選 none
column::name 點或邊字段映射關系配置name字段。

點或邊的字段名,當映射關系為屬性時表示屬性名。

column::type 點或邊字段映射關系配置type字段。
點或邊字段映射值的類型:
  • 主鍵ID僅支持string類型,您需要保證ID可以轉換為string類型,插件會強制轉換非string類型到string類型。
  • 普通屬性支持的類型: int, long, float, double, boolean, string
column::value 點或邊字段映射關系配置value字段。
點或邊字段映射的值,僅字符串類型的值支持自定義拼接:
  • #{N}表示直接映射源端值,N為源端column索引,從0開始。
  • test-#{0}表示對源端值進行拼接轉換,#{0}值前或后都可以添加固定字符串。
  • #{0}-#{1}表示進行多字段拼接,也可以在任意位置添加固定字符串,例如test-#{0}-test1-#{1}-test2
column::columnType 點或邊字段映射關系配置columnType字段。
點或邊字段映射字段的分類,支持以下枚舉值:
  • primaryKey表示該字段映射主鍵ID。
  • vertexProperty寫入類型為點時可選,表示該字段是點的普通屬性。
  • vertexSetProperty寫入類型為點時可選,表示該字段是點的SET屬性,多個屬性值分開多個column,屬性值要求基礎類型。
  • vertexJsonProperty寫入類型為點時可選,表示該字段是點屬性的JSON格式,value結構請參見properties示例。
  • srcPrimaryKey寫入類型為邊時必選,表示該字段映射起點主鍵ID。
  • dstPrimaryKey寫入類型為邊時必選,表示該字段映射終點主鍵ID。
  • edgeProperty寫入類型為邊時可選,表示該字段是邊的普通屬性。
  • edgeJsonProperty寫入類型為邊時可選,表示該字段是邊屬性的JSON格式,value結構請參見properties示例。
properties示例如下:
{"properties":[
    {"k":"name","t":"string","v":"tom"},
    {"k":"age","t":"int","v":"20"},
    {"k":"sex","t":"string","v":"male"}
]}

向導開發介紹

暫不支持向導模式開發。

腳本開發介紹

配置一個寫入GDB的數據同步作業,通過腳本模式開發請參見腳本模式配置任務

  • 點配置示例
    {
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                }
            ]
        },
        "setting":{
            "errorLimit":{
                "record":"100"             //錯誤記錄數,表示臟數據最大容忍條數。
            },
            "jvmOption":"",
            "speed":{
                "concurrent":8,// 并發線程數
                "throttle":false
            }
        },
        "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",        //點類型時此字段無需關注。
                    "maxConnectionPoolSize": 8,      //該值配置大于等于concurrent,取值在8、16、32...
                    "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":{
                "concurrent":8,
                "throttle":false
            }
        },
        "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",      //終點的主鍵轉換規則。
                    "maxConnectionPoolSize": 8,          //該值配置大于等于concurrent,取值在 8、16、32...
                    "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"
    }
說明

GDB需要升級到1.0.20或更高版本才支持SET屬性,使用SET屬性時請確認實例版本。