datax gdbreader 使用

  • 2022-07-14
  • 浏览 (1138)

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

相关文章

datax README 使用

datax adbpgwriter 使用

datax adswriter 使用

datax cassandrareader 使用

datax cassandrawriter 使用

datax dataxPluginDev 使用

datax drdsreader 使用

datax drdswriter 使用

datax elasticsearchwriter 使用

datax ftpreader 使用

0  赞