【轉發】利用子轉換重構ETL項目

1. 使用背景數據庫

在本團隊參與的大數據項目開發過程當中,須要從各業務系統抽取數據錄入數據中臺進行管理,通過技術調研後決定採用CKettle。微信

由於數據中臺中對象ID具備惟一特性,因此在製做轉換中須對ID進行惟一性校驗。app

由上述緣由形成在每一個轉換中都須要重複添加此校驗步驟,而且進行轉換修改時,若是此判斷步驟須要修改,會形成大量重複操做,不便於開發與維護。大數據

在實踐中發現Ckettle高級應用映射(子轉換)能大量簡化上述操做。子轉換具體原理能夠參照CKettle官方幫助文檔:優化

https://ckettle.ccsaii.com.cn/help/StepPluginType/Mappingspa

那麼下面咱們就項目中遇到的該問題作出以下的詳細說明。.net

2.  案例

2.1 項目現狀(優化前)

13d

 

2對象

 

上述圖1與圖2紅框處能夠看出,在各個業務轉換中存在同樣的entity_id惟一校驗步驟,形成大量的重複轉換步驟。blog

2.2 採用子轉換優化後

 

3

 

4 

如上圖優化後的轉換中的紅框標示處,是經過映射(子轉換)的方式將原有的重複步驟封裝成子轉換。

詳細操做步驟以下所示:

a) 將上述重複步驟封裝成一個新的轉換,如圖5所示;

 

圖5 封裝後的子轉換

 

子轉換內容說明以下:
1)  子轉換中,如需操做數據庫,則應與父轉換的中的數據庫配置保持一致。 2)  子轉換的入參,約定了從父轉換到子轉換之間傳遞的參數。形如方法的入參。此例中的配置以下圖所示

 

圖6 映射輸入規範

3) 父轉換中被抽離出來的步驟。

4) 子轉換的結束標識。形如方法定義的結尾。


b) 在父轉換中經過映射(子轉換)的方式替換掉以前的步驟。

 

圖7 父轉換

 

 

8 父轉換中配置映射子轉換

 

c) 並對父轉換中「映射(子轉換)」進行上圖相關配置

1) 子轉換的路徑。

2) 字段映射關係。源字段爲父轉換中流中的字段,形如方法的實參。映射字段爲以前子轉換所設置的字段,形如方法的形參。點開後的界面以下圖所示。

圖9 映射配置 

3) 將子轉換中處理後的入參返回到父轉換的流中。形如按地址傳參。


d)  執行父轉換,效果以下。已成功生成了新的entity_id,同時對應數據庫中也進行了entity_id的同步。

圖10 執行後的父轉換

 

3. 總結

CKettle映射特性讓轉換有了可重用性,讓ETL程序具備簡潔性。其輸入、輸出步驟及參數配置很是靈活,幾乎可讓任何複雜的轉換重構成可重用的子轉換。若是轉換比較大,也能夠重構成連續的子轉換組合實現。子轉換讓轉換數據流結構化,更容易理解。

在本項目中,經過子轉換的方式對43個轉換進行了優化,將其中具備重複調用的步驟按功能拆分紅各個子轉換,使整個轉換顯得簡潔明瞭,減小了大量重複操做,使其更加便於開發與維護。


本文分享自微信公衆號 - Kettle博士(gh_f656c3d7ba54)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索