基于oracle和gbase8a批量生成datax的json配置文件

项目背景

项目每天需要从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

猜你喜欢

转载自blog.csdn.net/weixin_41561946/article/details/109076868