緣起一:
公司現有數據倉庫,是通過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新系統帶來巨大便利:
- 抽取表等相關信息數據全部可配置化
- 抽取出錯信息直接表中查看
- 新加和修改直接修改表數據即可完成,極大提高效率
- 抽取歷史數據和錯誤數據可單獨執行
- 有抽取的歷史記錄日誌等信息