版本

# DataX EZooDBWriter

# 1 快速介绍

EZooDBWriter插件实现了写入数据到EZooDB实例的功能。EZooDBWriter通过java sdk连接远程EZooDB实例,获取Reader的数据,将数据写入到EZooDB。

# 2 实现原理

EZooDBWriter通过DataX框架获取Reader生成的协议数据,使用API接口写入数据到EZooDB实例。

# 3 功能说明

因为EZooDB中点和边的配置不同,导入时需要区分点和边的配置。

# 3.1 点配置样例

  • 这里是一份从内存生成点数据导入EZooDB实例的配置
{
    "job": {
        "setting": {
            "speed": {
                "channel": 1
            }
        },
        "content": [
            {
                 "reader": {
                    "name": "streamreader",
                    "parameter": {
                        "column" : [
                            {
                                "random": "1,100",
                                "type": "double"
                            },
                            {
                                "random": "1000,1200",
                                "type": "long"
                            }
                        ],
                        "sliceRecordCount": 1000
                    }
                },
                "writer": {
                    "name": "EZooDBwriter",
                    "parameter": {
                        "uris": "ezoodb://ezoo:ezoo@localhost:9090",
                        "username": "ezoo",
                        "password": "ezoo",
                        "writeMode": "INSERT",
                        "labelType": "NODE",
                        "label": "node1",
                        "maxRecordsInBatch": 64,
                        "column": [
                            {
                                "name": "id",
                                "value": "#{0}",
                                "type": "string",
                                "columnType": "uniqueKey"
                            },
                            {
                                "name": "node_propKey",
                                "value": "#{1}",
                                "type": "string",
                                "columnType": "nodeProperty"
                            }
                        ]
                    }
                }
            }
        ]
    }
}

# 3.2 边配置样例

  • 这里是一份从内存生成边数据导入EZooDB实例的配置

注意 下面配置导入边时,需要提前在EZooDB实例中写入点,要求分别存在unique index为node1node2的点。


{
    "job": {
        "setting": {
            "speed": {
                "channel": 1
            }
        },
        "content": [
            {
                 "reader": {
                    "name": "streamreader",
                    "parameter": {
                        "column" : [
                            {
                                "random": "100,200",
                                "type": "double"
                            },
                            {
                                "random": "1,100",
                                "type": "string"
                            },
                            {
                                "random": "1,100",
                                "type": "string"
                            },
                            {
                                "random": "2000,2200",
                                "type": "long"
                            }
                        ],
                        "sliceRecordCount": 1000
                    }
                },
                "writer": {
                    "name": "EZooDBwriter",
                    "parameter": {
                        "uris": "ezoodb://ezoo:ezoo@localhost:9090",
                        "username": "ezoo",
                        "password": "ezoo",
                        "writeMode": "INSERT",
                        "labelType": "EDGE",
                        "label": "edge1",
                        "srcLabel":"node1",
                        "dstLabel":"node2",
                        "column": [
                            {
                                "name": "id",
                                "value": "#{0}",
                                "type": "string",
                                "columnType": "uniqueKey"
                            },
                            {
                                "name": "id",
                                "value": "#{1}",
                                "type": "string",
                                "columnType": "srcUniqueKey"
                            },
                            {
                                "name": "id",
                                "value": "#{2}",
                                "type": "string",
                                "columnType": "dstUniqueKey"
                            },
                            {
                                "name": "edge_propKey",
                                "value": "#{3}",
                                "type": "string",
                                "columnType": "edgeProperty"
                            }
                        ]
                    }
                }
            }
        ]
    }
}

# 3.3 参数说明

  • uris

    • 描述:EZooDB实例连接域名,对应EZooDB部署的ip和端口;
    • 必选:是
    • 默认值:无
  • username

    • 描述:EZooDB实例账号名
    • 必选:是
    • 默认值:无
  • password

    • 描述:图实例账号名对应密码
    • 必选:是
    • 默认值:无
  • label

    • 描述:类型名,即点/边名称; label支持从源列中读取,如#{0},表示取第一列字段作为label名。源列索引从0开始;
    • 必选:是
    • 默认值:无
  • labelType

    • 描述:label类型;
      • 枚举值"NODE"表示点
      • 枚举值"EDGE"表示边
    • 必选:是
    • 默认值:无
  • srcLabel

    • 描述:当label为边时,表示起点的点名称;srcLabel支持从源列中读取,如#{0},表示取第一列字段作为label名。源列索引从0开始;
    • 必选:labelType为边,必填;
    • 默认值:无
  • dstLabel

    • 描述:当label为边时,表示终点的点名称;dstLabel支持从源列中读取,如#{0},表示取第一列字段作为label名。源列索引从0开始;
    • 必选:labelType为边,必填;
    • 默认值:无
  • writeMode

    • 描述:导入id重复时的处理模式;
      • 枚举值"INSERT"表示新增,会报错,错误记录数加1;
      • 枚举值"MERGE"表示更新属性值,不计入错误;
      • 枚举值"SKIP"表示跳过,不计入错误;
      • 枚举值"IMPORT_DATA"表示批量导入,会报错,错路记录数加1,该模式与INSERT的区别是,支持更大批次的合并导入;
      • 枚举值"INCR"表示增量同步,支持数据的增删改,会报错,错路记录数加1
    • 必选:是
    • 默认值:INSERT
  • maxRecordsInBatch

    • 描述:一次处理的记录数
    • 必选:否
    • 默认值:16
  • transaction

    • 描述:事务级别:
      • 枚举值"BATCH"表示:默认,每一次插入一个事务
      • 枚举值"TASK"表示:每一个任务一个事务
      • 枚举值"JOB"表示:每一个作业一个事务
      • 枚举值"JOB_GROUP"表示:每一批作业一个事务,配合jobGroupjobOrder使用,当设置为这个级别的事务时,请保证每个作业的执行顺序。
    • 必选:否
    • 默认值:none
  • jobGroup

    • 描述:事务级别设置为jobGroup时必填,保证每个作业组唯一
    • 必选:否
    • 默认值:无
  • jobOrder

    • 描述:事务级别设置为jobGroup时必填,作业顺序:
      • 枚举值"FIRST"表示:第一个执行的作业
      • 枚举值"MID"表示:中间执行的作业
      • 枚举值"LAST"表示:最后执行的作业
    • 必选:否
    • 默认值:无
  • column

    • 描述:点/边字段映射关系配置
    • 必选:是
    • 默认值:无
  • column -> name

    • 描述:点/边映射关系的字段名
    • 必选:是
    • 默认值:无
  • column -> value

    • 描述:点/边映射关系的字段值;
      • #{N}表示直接映射源端值,N为源端column索引,从0开始;#{0}表示映射源端column第1个字段;
      • #{0}-#{1}表示做多字段拼接
    • 必选:是
    • 默认值:无
  • column -> type

    • 描述:点/边映射关系的字段值类型;
      • 属性支持类型:int, float, double, boolean, string
    • 必选:是
    • 默认值:无
  • column -> columnType

    • 描述:点/边映射关系字段对应到EZooDB点/边数据的类型,支持以下几类枚举值:
      • 公共枚举值:
        • uniqueKey:表示该字段是唯一索引,唯一索引支持联合唯一索引。当唯一索引为联合唯一索引时,请在组成该联合唯一索引的所有列上指定其为uniqueKey
        • CUDModeProperty:表示该条记录的插入方式(增,删,改),只在writeMode INCR模式下生效
      • 点枚举值:
        • nodeProperty:labelType为点时,表示该字段是点的普通属性
      • 边枚举值:
        • srcUniqueKey:labelType为边时,表示该字段是起点唯一索引
        • dstUniqueKey:labelType为边时,表示该字段是终点唯一索引
        • edgeProperty:labelType为边时,表示该字段是边的普通属性
    • 必选:是
    • 默认值:无
  • column -> columnEnum

    • 描述:点/边增删改枚举值,配合columnType CUDModeProperty使用;
      • 属性支持类型:string
      • 属性填写方式:以增删改的顺序填写,英文逗号分割
    • 必选:否
    • 默认值:无
    • 示例:源数据0表示新增,1表示更新,-1表示删除,则写为 "CUDModeProperty": "0,1,-1"

# 4 约束限制

  • 导入边记录前要求EZooDB中已经存在边关联的起点/终点
  • EZooDBWriter插件与用户查询EZooDB使用相同的EZooDB实例端口,导入时可能会影响查询性能
最近一次更新时间: 9/16/2022, 9:12:31 AM