datax是開源的ETL工具,可根據需求自己做開發、實施和維護。支持多種數據庫類型,可擴張性強,一張表的同步作業調起只需一行命令。筆者認為遷移的要點有二:①遷移目的表先建好,因datax做不了結構同步;②配置正確的json文件,一張表一個json文件。
datax跨數據庫同步常遇到的問題包括:
1、如何實現不同數據庫的數據同步?
根據數據庫類型,配置job中的reader、writer。官方支持多種數據庫。每一張表的同步,需要配置一個json文件。需要手動創建目的表或者分區表。
2、如何指定數據同步方式,增量、全量?
官方文檔writer模塊中不同數據庫的默認配置參數,有的數據庫類型只有一種同步當時,有的必須指定WriteMode,postgrewriter只支持insert方式入庫,mysql支持insert、replace方式寫入,當目的表沒有主鍵或者其他唯一約束時,insert、replace同步數據的結果是一樣的。
3、如何提高同步效率?
調參,修改json文件中的 setting channel參數;針對大表的同步,可視實際需求和可行性做分區;
4、datax是否有事務控制
datax沒有事務控制,但json中的一些配置參數能用起來。比如, jobsetting中的errorlimit,是對寫入的臟數據的限制,一般設置為1,即一旦產生一條臟數據,便回滾此次寫入。也可以利用起writer中的preSql、postSql。preSql即在寫入數據前對目的表執行sql語句操作,postSql即在寫入數據后對目的表進行操作。比如,preSql設置,寫入數據前清空目的表,postSql設置寫入后如果記錄數與源表對不上,或者時間戳字段沒有更新,則清空本次作業中寫入該目的表的數據等。
5、datax遷移要求目的數據庫先有對應的表,如何批量在目的數據庫建表?
datax是通過代碼編寫規則,可以用python的第三方庫編寫腳本,遠程連接目的數據庫批量建表,sqlalchemy、pymysql等第三方庫都可以用起來。