本文为您介绍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在全局点边的范围内唯一。
    • 边必须选择srcIdTransRuledstIdTransRule,且必须和导入点时选择的idTransRule一致。
  • 示例的字段名或枚举值,如果没有特殊说明,均为大小写敏感。
  • 目前GDB服务端仅支持UTF-8编码格式,要求来源数据均为UTF-8编码格式。
  • 由于网络限制,运行数据集成任务时,只能使用独享资源模式,请您提前购买并绑定GDB实例所在的专有网络(VPC)。调度任务可以使用公共资源组。

参数说明

参数 描述 是否必选 默认值
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"}
]}

向导开发介绍

暂不支持向导模式开发。

脚本开发介绍

配置一个写入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"
    }