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"} ]}
- 描述:GDB点或边数据到列数据的映射关系,支持以下枚举值:
4 性能报告
(TODO)
5 使用约束
无
6 FAQ
无