DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
DataX工具是用json文件作为配置文件的,根据官方提供文档我们构建Json文件如下:
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": ["name","age"],
"where": "age<100",
"connection": [
{
"table": [
"person"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "root",
"password": "123456",
"column": ["name","age_true"],
"connection": [
{
"table": [
"person"
],
"jdbcUrl":"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 1,
"byte": 104857600
},
"errorLimit": {
"record": 10,
"percentage": 0.05
}
}
}
它由三部分组成,分别是读插件,写插件和通用配置。
1、Reader插件即读插件,常用参数如下:
name: 与要读取的数据库一致,字符串
jdbcUrl: 数据库链接 ,数组
username :数据库用户名,字符串
password:数据库密码, 字符串
table :要同步的表名,数组,需保证表结构一致
column: 要同步的列名, 数组
where :选取的条件,字符串
querySql:自定义查询语句, 会自动忽略上述的同步条件
2、Writer插件即写插件,常用参数如下:
name:与要读取的数据库一致 ,字符串
jdbcUrl:数据库链接,字符串
username:数据库用户名 字符串,数据库的用户名
password: 数据库密码 ,字符串,数据库的密码
table:要同步的表名,数组,需保证表结构一致
column :列名可以不对应,但是类型和总的个数要一致 数组,需保证表结构一致
preSql: 写入前执行的语句,数组,比如清空表等,如TRUNCATE TABLE @table(或指定表名)
postSql : 写入后执行的语句 ,数组
writeMode:写入方式,默认为insert insert/replace/update
session:DataX在获取Mysql连接时,执行session指定的SQL语句,修改当前connection session属性
batchSize: 默认值:1024,一次性批量提交的记录数大小,该值可以极大减少DataX与Mysql的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成DataX运行进程OOM情况。
3、通用配置:
(1)、job.setting.speed(流量控制)
Job支持用户对速度的自定义控制,channel的值可以控制同步时的并发数,byte的值可以控制同步时的速度
(2)、job.setting.errorLimit(脏数据控制)
Job支持用户对于脏数据的自定义监控和告警,包括对脏数据最大记录数阈值(record值)或者脏数据占比阈值(percentage值),当Job传输过程出现的脏数据大于用户指定的数量/百分比,DataX Job报错退出。