DataX GDBReader

1. 快速介绍

GDBReader插件实现读取GDB实例数据的功能,通过Gremlin Client连接远程GDB实例,按配置提供的label生成查询DSL,遍历点或边数据,包括属性数据,并将数据写入到Record中给到Writer使用。

2. 实现原理

GDBReader使用Gremlin Client连接GDB实例,按label分不同Task取点或边数据。 单个Task中按label遍历点或边的id,再切分范围分多次请求查询点或边和属性数据,最后将点或边数据根据配置转换成指定格式记录发送给下游写插件。

GDBReader按label切分多个Task并发,同一个label的数据批量异步获取来加快读取速度。如果配置读取的label列表为空,任务启动前会从GDB查询所有label再切分Task。

3. 功能说明

GDB中点和边不同,读取需要区分点和边点配置。

3.1 点配置样例

{
  "job": {
    "setting": {
      "speed": {
        "channel": 1
      }
      "errorLimit": {
        "record": 1
      }
    },

    "content": [
      {
        "reader": {
          "name": "gdbreader",
          "parameter": {
            "host": "10.218.145.24",
            "port": 8182,
            "username": "***",
            "password": "***",
            "fetchBatchSize": 100,
            "rangeSplitSize": 1000,
            "labelType": "VERTEX",
            "labels": ["label1", "label2"],
            "column": [
              {
                "name": "id",
                "type": "string",
                "columnType": "primaryKey"
              },
              {
                "name": "label",
                "type": "string",
                "columnType": "primaryLabel"
              },
              {
                "name": "age",
                "type": "int",
                "columnType": "vertexProperty"
              }
            ]
          }
        },
        "writer": {
          "name": "streamwriter",
          "parameter": {
            "print": true
          }
        }
      }
    ]
  }
}

3.2 边配置样例

{
  "job": {
    "setting": {
      "speed": {
        "channel": 1
      },
      "errorLimit": {
        "record": 1
      }
    },

    "content": [
      {
        "reader": {
          "name": "gdbreader",
          "parameter": {
            "host": "10.218.145.24",
            "port": 8182,
            "username": "***",
            "password": "***",
            "fetchBatchSize": 100,
            "rangeSplitSize": 1000,
            "labelType": "EDGE",
            "labels": ["label1", "label2"],
            "column": [
              {
                "name": "id",
                "type": "string",
                "columnType": "primaryKey"
              },
              {
                "name": "label",
                "type": "string",
                "columnType": "primaryLabel"
              },
              {
                "name": "srcId",
                "type": "string",
                "columnType": "srcPrimaryKey"
              },
              {
                "name": "srcLabel",
                "type": "string",
                "columnType": "srcPrimaryLabel"
              },
              {
                "name": "dstId",
                "type": "string",
                "columnType": "srcPrimaryKey"
              },
              {
                "name": "dstLabel",
                "type": "string",
                "columnType": "srcPrimaryLabel"
              },
              {
                "name": "name",
                "type": "string",
                "columnType": "edgeProperty"
              },
              {
                "name": "weight",
                "type": "double",
                "columnType": "edgeProperty"
              }
            ]
          }
        },

        "writer": {
          "name": "streamwriter",
          "parameter": {
            "print": true
          }
        }
      }
    ]
  }
}

3.3 参数说明

  • host

    • 描述:GDB实例连接地址,对应’实例管理’->‘基本信息’页面的网络地址
    • 必选:是
    • 默认值:无
  • port

    • 描述:GDB实例连接地址对应的端口
    • 必选:是
    • 默认值:8182
  • username

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

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

    • 描述:一次GDB请求读取点或边的数量,响应包含点或边以及属性
    • 必选:是
    • 默认值:100
  • rangeSplitSize

    • 描述:id遍历,一次遍历请求扫描的id个数
    • 必选:是
    • 默认值:10 * fetchBatchSize
  • labels

    • 描述:标签数组,即需要导出的点或边标签,支持读取多个标签,用数组表示。如果留空([]),表示GDB中所有点或边标签
    • 必选:是
    • 默认值:无
  • labelType

    • 描述:数据标签类型,支持点、边两种枚举值
      • VERTEX:表示点
      • EDGE:表示边
    • 必选:是
    • 默认值:无
  • column

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

    • 描述:点或边映射关系的字段名,指定属性时表示读取的属性名,读取其他字段时会被忽略
    • 必选:是
    • 默认值:无
  • column -> type

    • 描述:点或边映射关系的字段类型
      • id, label在GDB中都是string类型,配置非string类型时可能会转换失败
      • 普通属性支持基础类型,包括int, long, float, double, boolean, string
      • GDBReader尽量将读取到的数据转换成配置要求的类型,但转换失败会导致该条记录错误
    • 必选:是
    • 默认值:无
  • column -> columnType

    • 描述:GDB点或边数据到列数据的映射关系,支持以下枚举值:
      • primaryKey: 表示该字段是点或边的id
      • primaryLabel: 表示该字段是点或边的label
      • srcPrimaryKey: 表示该字段是边关联的起点id,只在读取边时使用
      • srcPrimaryLabel: 表示该字段是边关联的起点label,只在读取边时使用
      • dstPrimaryKey: 表示该字段是边关联的终点id,只在读取边时使用
      • dstPrimaryLabel: 表示该字段是边关联的终点label,只在读取边时使用
      • vertexProperty: 表示该字段是点的属性,只在读取点时使用,应用到SET属性时只读取其中的一个属性值
      • vertexJsonProperty: 表示该字段是点的属性集合,只在读取点时使用。属性集合使用JSON格式输出,包含所有的属性,不能与其他vertexProperty配置一起使用
      • edgeProperty: 表示该字段是边的属性,只在读取边时使用
      • edgeJsonProperty: 表示该字段是边的属性集合,只在读取边时使用。属性集合使用JSON格式输出,包含所有的属性,不能与其他edgeProperty配置一起使用
    • 必选:是
    • 默认值:无
    • vertexJsonProperty格式示例,新增c字段区分SET属性,但是SET属性只包含单个属性值时会标记成普通属性
    {"properties":[
      {"k":"name","t","string","v":"Jack","c":"set"},
      {"k":"name","t","string","v":"Luck","c":"set"},
      {"k":"age","t","int","v":"20","c":"single"}
    ]}
    
    • edgeJsonProperty格式示例,边不支持多值属性
    {"properties":[
      {"k":"created_at","t","long","v":"153498653"},
      {"k":"weight","t","double","v":"3.14"}
    ]}
    

4 性能报告

(TODO)

5 使用约束

6 FAQ