datax连接kebers的hive datax replace_bc

DataX在mysql间数据迁移操作

DataX概览

MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReader通过JDBC连接远程Mysql数据库,并执行相应的sql语句将数据从mysql库中SELECT出来。

不同于其他关系型数据库,MysqlReader不支持FetchSize.

可以开发自己的reader或writer插件,也可以对已经存在的进行改进

实现原理

简而言之,MysqlReader通过JDBC连接器连接到远程的Mysql数据库,并根据用户配置的信息生成查询SELECT SQL语句,然后发送到远程Mysql数据库,并将该SQL执行返回结果使用DataX自定义的数据类型拼装为抽象的数据集,并传递给下游Writer处理。

对于用户配置Table、Column、Where的信息,MysqlReader将其拼接为SQL语句发送到Mysql数据库;对于用户配置querySql信息,MysqlReader直接将其发送到Mysql数据库。

快速上手

构建一个测试数据表

新建表test语句如下所示。

CREATE TABLE `test` (
`name` varchar(20) COLLATE utf8_bin NOT NULL,
`age` int(4) NOT NULL,
`age_true` int(2) DEFAULT NULL
)

并向其中插入40条数据

insert into test(`name`,age,age_true) values("lihao",20,3)

...

然后新建表2:test1

CREATE TABLE `test1` (
`name` varchar(10) COLLATE utf8_bin NOT NULL,
`age1` int(10) NOT NULL
)

构建任务Json

DataX工具是用json文件作为配置文件的,根据官方提供文档我们构建Json文件如下所示。

{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "xxx",
"column": ["name","age"],
"where": "age<100",
"connection": [
{
"table": [
"test"
],
"jdbcUrl": [
"jdbc:mysql://10.3.7.xxx:3306/real_time_alarm_data?characterEncoding=utf8"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "root",
"password": "xxx",
"column": ["name","age1"],
"connection": [
{
"table": [
"test1"
],
"jdbcUrl":"jdbc:mysql://10.3.7.xxx:3306/real_time_alarm_data?characterEncoding=utf8"
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 1,
"byte": 104857600
},
"errorLimit": {
"record": 10,
"percentage": 0.05
}
}
}
}

它由三部分组成,分别是读,写和通用配置。

Reader部分,也就是读,常用以下几种参数,如表2-3所示。

表2-3 读参数表

参数名

解释

备注

是否必须/默认值

name

与要读取的数据库一致

name

jdbcUrl

数据库链接

数组会自动选择一个合法的链接可以填写连接附件控制信息

是/无

username

用户名

字符串,数据库的用户名

是/无

password

密码

字符串,数据库的密码

是/无

table

要同步的表名

数组,需保证表结构一致

是/无

column

所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。用户使用代表默认使用所有列配置,例如[""]。支持列裁剪,即列可以挑选部分列进行导出。
支持列换序,即列可以不按照表schema信息进行导出。
支持常量配置,用户需要按照Mysql SQL语法格式: ["id", "table", "1", ""bazhen.csy"", "null", "to_char(a + 1)", "2.3" , "true"] id为普通列名,table为包含保留在的列名,1为整形数字常量,"bazhen.csy"为字符串常量,null为空指针,to_char(a + 1)为表达式,2.3为浮点数,true为布尔值。

是/无

where

选取的条件

支持列裁剪,即列可以挑选部分列进行导出。字符串

否/无

querySql

在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id

当用户配置querySql时,MysqlReader直接忽略table、column、where条件的配置,querySql优先级大于table、column、where选项。

否/无

Writer部分,也就是写,常用以下几种参数,如表2-4所示。

参数名

解释

备注

name

与要读取的数据库一致

字符串

jdbcUrl

数据库链接

字符串不和writer一样可以填写连接附件控制信息

username

用户名

字符串,数据库的用户名

password

密码

字符串,数据库的密码

table

要同步的表名

数组,需保证表结构一致

column

要同步的列名

列名可以不对应,但是类型和总的个数要一致

preSql

写入前执行的语句

数组,比如清空表等

postSql

写入后执行的语句

数组

writeMode

写入方式,默认为insert

insert/replace/update

job.setting.speed(流量控制)

Job支持用户对速度的自定义控制,channel的值可以控制同步时的并发数,byte的值可以控制同步时的速度

job.setting.errorLimit(脏数据控制)

Job支持用户对于脏数据的自定义监控和告警,包括对脏数据最大记录数阈值(record值)或者脏数据占比阈值(percentage值),当Job传输过程出现的脏数据大于用户指定的数量/百分比,DataX Job报错退出。

执行

将上面的json文件放到/data/job目录下,然后

./bin/data.py ./job/test.json

然后通过脚本或者java程序定时执行之。

参考