DataX ADB PG Writer
1 快速介绍
AdbpgWriter 插件实现了写入数据到 ABD PG版数据库的功能。在底层实现上,AdbpgWriter 插件会先缓存需要写入的数据,当缓存的 数据量达到 commitSize 时,插件会通过 JDBC 连接远程 ADB PG版 数据库,并执行 COPY 命令将数据写入 ADB PG 数据库。
AdbpgWriter 可以作为数据迁移工具为用户提供服务。
2 实现原理
AdbpgWriter 通过 DataX 框架获取 Reader 生成的协议数据,首先会将数据缓存,当缓存的数据量达到commitSize时,插件根据你配置生成相应的COPY语句,执行 COPY命令将数据写入ADB PG数据库中。
3 功能说明
3.1 配置样例
- 这里使用一份从内存产生到 AdbpgWriter导入的数据
{
"job": {
"setting": {
"speed": {
"channel": 32
}
},
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"column" : [
{
"value": "DataX",
"type": "string"
},
{
"value": 19880808,
"type": "long"
},
{
"value": "1988-08-08 08:08:08",
"type": "date"
},
{
"value": true,
"type": "bool"
},
{
"value": "test",
"type": "bytes"
}
]
},
"sliceRecordCount": 1000
},
"writer": {
"name": "adbpgwriter",
"parameter": {
"username": "username",
"password": "password",
"host": "host",
"port": "1234",
"database": "database",
"schema": "schema",
"table": "table",
"preSql": ["delete * from table"],
"postSql": ["select * from table"],
"column": ["*"]
}
}
}
]
}
}
3.2 参数说明
-
name
-
描述:插件名称
-
必选:是
-
默认值:无
-
-
username
-
描述:目的数据库的用户名
-
必选:是
-
默认值:无
-
-
password
-
描述:目的数据库的密码
-
必选:是
-
默认值:无
-
-
host
-
描述:目的数据库主机名
-
必选:是
-
默认值:无
-
-
port
-
描述:目的数据库的端口
-
必选:是
-
默认值:无
-
-
database
-
描述:需要写入的表所属的数据库名称
-
必选:是
-
默认值:无
-
-
schema
-
描述:需要写入的表所属的schema名称
-
必选:是
-
默认值:无
-
-
table
-
描述:需要写入的表名称
-
必选:是
-
默认值:无
-
-
column
-
描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: “column”: [“id”,“name”,“age”]。如果要依次写入全部列,使用表示, 例如: “column”: [""]
注意:1、我们强烈不推荐你这样配置,因为当你目的表字段个数、类型等有改动时,你的任务可能运行不正确或者失败 2、此处 column 不能配置任何常量值
-
必选:是
-
默认值:否
-
-
preSql
-
描述:写入数据到目的表前,会先执行这里的标准语句。如果 Sql 中有你需要操作到的表名称,可以使用
@table
表示,这样在实际执行 Sql 语句时,会对变量按照实际表名称进行替换。比如你的任务是要写入到目的端的100个同构分表(表名称为:datax_00,datax01, … datax_98,datax_99),并且你希望导入数据前,先对表中数据进行删除操作,那么你可以这样配置:"preSql":["delete from @table"]
,效果是:在执行到每个表写入数据前,会先执行对应的 delete from 对应表名称 -
必选:否
-
默认值:否
-
-
postSql
-
描述:写入数据到目的表后,会先执行这里的标准语句。如果 Sql 中有你需要操作到的表名称,可以使用
@table
表示,这样在实际执行 Sql 语句时,会对变量按照实际表名称进行替换。 -
必选:否
-
默认值:否
-
3.3 类型转换
目前 AdbpgWriter 支持大部分 ADB PG 数据库的类型,但也存在部分没有支持的情况,请注意检查你的类型。
下面列出 AdbpgWriter 针对 ADB PG 类型转换列表:
DataX 内部类型 | ADB PG 数据类型 |
---|---|
Long | bigint, bigserial, integer, smallint, serial |
Double | double precision, float, numeric, real |
String | varchar, char, text |
Date | date, time, timestamp |
Boolean | bool |
4 性能报告
4.1 环境准备
4.1.1 数据特征
建表语句:
create table schematest.test_datax (
t1 int,
t2 bigint,
t3 bigserial,
t4 float,
t5 timestamp,
t6 varchar
)distributed by(t1);
4.1.2 机器参数
-
执行DataX的机器参数为:
- cpu: 24核
- mem: 96GB
-
ADB PG数据库机器参数为:
- 平均core数量:4
- primary segment 数量: 4
- 计算组数量:2
4.2 测试报告
4.2.1 单表测试报告
通道数 | commitSize MB | DataX速度(Rec/s) | DataX流量(M/s) |
---|---|---|---|
1 | 10 | 54098 | 15.54 |
1 | 20 | 55000 | 15.80 |
4 | 10 | 183333 | 52.66 |
4 | 20 | 173684 | 49.89 |
8 | 10 | 330000 | 94.79 |
8 | 20 | 300000 | 86.17 |
16 | 10 | 412500 | 118.48 |
16 | 20 | 366666 | 105.32 |
32 | 10 | 366666 | 105.32 |
4.2.2 性能测试小结
channel数对性能影响很大
通常不建议写入数据库时,通道个数 > 32