项目背景
项目每天需要从oracle,gbase8a两种数据库中抽取增量数据和全量数据到阿里的ADS中,之前是基于kettle+crontab来实现数据的抽取与调度的。因kettle配置简易,但抽取效率低,无法满足业务的日常使用,目前开源软件datax在测试期间性能与效果都能满足业务需要,但也有一个缺点,那就是datax的json配置文件配置起来不太方面,于是就有了这篇文章。
项目需求
1、将kettle同步的业务表修改为了datax同步
2、oracle数据库中有70张业务,gbase8a中有60张
3、ADS中的表结构与oracle,gbase8a中的业务表结构保持一致。
实现思路
datax的主要工作是书写json配置文件,即源库与目标库中业务表字段的对应关系,而这一部分都是ctl +c,ctl+v 操作,所以通过相应的SQL语句与SHELL相结合即可解决繁琐的配置操作。
1、制定json同步模板及格式
2、通过SQL语句获取业务表的字段
3、通过SHELL批量生成同步表的json配置文件
实现方式
1、模板格式
{
"job": {
"setting": {
"speed": {
"byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "rdbmsreader",
"parameter": {
"username": "${gbase_username}",
"password": "${gbase_password}",
"connection": [
{
"querySql": [
"select source_sql from table_name"
],
"jdbcUrl": [
"${gbase_jdbc_url}"
]
}
],
"fetchSize": 1024
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "${ads_username}",
"password": "${ads_password}",
"preSql": [
"truncate table table_name"
],
"column":[
target_sql
],
"connection": [
{
"table": [
"table_name"
],
"jdbcUrl": "${ads_jdbc_url}"
}
]
}
}
}
]
}
}
{
"job": {
"setting": {
"speed": {
"byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"username": "${oracle_username}",
"password": "${oracle_password}",
"connection": [
{
"querySql": [
"select source_sql from table_name"
],
"jdbcUrl": [
"${oracle_jdbc_url}"
]
}
],
"fetchSize": 1024
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "${ads_username}",
"password": "${ads_password}",
"preSql": [
"truncate table table_name"
],
"column":[
target_sql
],
"connection": [
{
"table": [
"table_name"
],
"jdbcUrl": "${ads_jdbc_url}"
}
]
}
}
}
]
}
}
2、获取业务表字段的SQL语句
3、shell脚本编写
总结
参考资料
https://www.yuque.com/docs/share/454e9a42-b6c7-44b2-9d29-1d5795199456?#a92bb2f4
https://github.com/alibaba/DataX