1. 使用背景數據庫
在本團隊參與的大數據項目開發過程當中,須要從各業務系統抽取數據錄入數據中臺進行管理,通過技術調研後決定採用CKettle。微信
由於數據中臺中對象ID具備惟一特性,因此在製做轉換中須對ID進行惟一性校驗。app
由上述緣由形成在每一個轉換中都須要重複添加此校驗步驟,而且進行轉換修改時,若是此判斷步驟須要修改,會形成大量重複操做,不便於開發與維護。大數據
在實踐中發現Ckettle高級應用映射(子轉換)能大量簡化上述操做。子轉換具體原理能夠參照CKettle官方幫助文檔:優化
https://ckettle.ccsaii.com.cn/help/StepPluginType/Mappingspa
那麼下面咱們就項目中遇到的該問題作出以下的詳細說明。.net
2.1 項目現狀(優化前)
圖13d
圖2對象
上述圖1與圖2紅框處能夠看出,在各個業務轉換中存在同樣的entity_id惟一校驗步驟,形成大量的重複轉換步驟。blog
2.2 採用子轉換優化後
圖3
圖4
如上圖優化後的轉換中的紅框標示處,是經過映射(子轉換)的方式將原有的重複步驟封裝成子轉換。
詳細操做步驟以下所示:
a) 將上述重複步驟封裝成一個新的轉換,如圖5所示;
圖5 封裝後的子轉換
圖6 映射輸入規範
3) 父轉換中被抽離出來的步驟。
4) 子轉換的結束標識。形如方法定義的結尾。
b) 在父轉換中經過映射(子轉換)的方式替換掉以前的步驟。
圖7 父轉換
圖8 父轉換中配置映射子轉換
c) 並對父轉換中「映射(子轉換)」進行上圖相關配置
1) 子轉換的路徑。
2) 字段映射關係。源字段爲父轉換中流中的字段,形如方法的實參。映射字段爲以前子轉換所設置的字段,形如方法的形參。點開後的界面以下圖所示。
圖9 映射配置
3) 將子轉換中處理後的入參返回到父轉換的流中。形如按地址傳參。
圖10 執行後的父轉換
3. 總結
CKettle映射特性讓轉換有了可重用性,讓ETL程序具備簡潔性。其輸入、輸出步驟及參數配置很是靈活,幾乎可讓任何複雜的轉換重構成可重用的子轉換。若是轉換比較大,也能夠重構成連續的子轉換組合實現。子轉換讓轉換數據流結構化,更容易理解。
在本項目中,經過子轉換的方式對43個轉換進行了優化,將其中具備重複調用的步驟按功能拆分紅各個子轉換,使整個轉換顯得簡潔明瞭,減小了大量重複操做,使其更加便於開發與維護。
本文分享自微信公衆號 - Kettle博士(gh_f656c3d7ba54)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。