缘起一:
公司现有数据仓库,是通过kettle从mysql抽取到目标库,运行多年,主要有以下问题,
1,效率低:kettle抽取行数少
2,容错性差:一个表抽取出错就导致后续计算会出问题,
3,扩展性差: 对多库多表等支持不好
近300张表抽取,再加上计算,每天都算到7点,还有2个巨大的计算要等到10点左右才能算完。
上一任数仓开发者,使用datax来替换kettle,将数据通过datax抽取到新的greeplum中,效率很高,而且稳定,但每个表一个shell文件,300个表要300个shell文件,每次修改都要登陆到linux修改,太麻烦了。但迁移了部分表又没有全部迁移。
自从2022年11月接下这套数据仓库系统,就想怎么优化这数仓系统。
缘起二:
2023年10月开始,公司接了几个关于数据指标系统计算的大单。经济形势不好,经济上开始开源节流,我们这些维护人员转做项目,当项目确定后,和另一个开发人员一起做个数据仓库系统。这个数据仓库的ETL抽取层任务交给我,因为以前设计和实现过下面2个系统:
1、SSIS数据同步系统,
2,用ELK分析每天4亿多条腾讯云MySQL审计日志(1)--解决过程
借鉴2个系统的思路,就想,是否可以通过程序调用datax,做个闭环的基于datax的系统,不用再写很多shell文件,将其元数据都配置化,提高开发效率。
方法:
市面上是有datax_web这个可视化配置平台,自己测试,和自己想要的不一样,思考了一下,要么用linux的shell或者python3来写这个datax的配置调度,将其需要的数据都配置化:
1,测试了linux的shell,在读取mysql表数据字段数据时,进行多字段数据读取,字段数据读出后,不能很好分割出,有空格的会作为一个新字段。不可用
2,因datax也是python开发的,支持python2,想用python3程序开发,实现配置化,通过测试,发现是可以直接在python3程序调用datax,而且很方便。 可用
目标: 简化datax的开发,其配置等数据都数据库表配置化
经过1个多月的开发和测试,达到了上面的2个要求,同时可以记录执行过程等相关信息(如抽取时间,抽取速度,抽取行数等),执行错误记录相关错误信息,不用再登陆到linux去看日志文件信息。
这个小系统,被命名为pydatax抽取系统,和以前用kettle和单个文件datax相比,有很大优势:简单,实用和高效
pydatax新系统带来巨大便利:
-
- 抽取表等相关信息数据全部可配置化
- 抽取出错信息直接表中查看
- 新加和修改直接修改表数据即可完成,极大提高效率
- 抽取历史数据和错误数据可单独执行
- 有抽取的历史记录日志等信息