本文为您介绍GDB Writer支持的数据类型、字段映射和数据源等参数及配置示例。

图数据库(Graph Database,简称GDB)是一种支持属性图模型,用于处理高度连接数据查询与存储的实时可靠的在线数据库,支持TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序

说明

使用限制

  • 必须先运行点的同步任务,运行成功后,才可以运行边的同步任务。
  • 点有以下约束规则:
    • 点必须具备类型名(即点名称,对应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, longfloatdoublebooleanstring
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":3,
                "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",        // 点类型时此字段无需关注。
                    "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":3,
                "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",      //终点的主键转换规则。
                    "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属性时请确认实例版本