kettle6.0基礎功能實戰

業務背景

因爲公司業務,需要進行國內-海外部分業務數據的同步,早期本來方案選定直接做MySQL主從,但是考慮到同步過程中不需要同步所有數據庫表,且單表中也需要根據業務情況,篩選出海外的數據,因此MYSQL直接做主從複製不符合預期。最終選型了kettle。Kettle是Pentaho的一個組件,主要用於數據庫間的數據遷移,我們使用的是6.1版本,目前網上對該版本的介紹還比較少,所以很多功能還是靠自己摸索使用。

功能介紹

在kettle中,需要使用到transformationjob,transformation支持使用各種組件用於完成ETL過程(Extraction-Transformation-Loading)。轉換包括主對象樹和核心對象樹,主對象樹用於配置轉換參數,包括數據庫連接等,而核心對象樹則是用於完成具體操作。
主對象樹包括

  • DB連接:顯示當前transformation中的數據庫連接,每一個–transformation的數據庫連接都需要單獨配置;
  • Steps:一個transformation中應用到的環節列表;
  • Hops:一個transformation中應用到的節點連接列表。

核心對象樹則包括

  • Input:輸入環節
  • Output:輸出環節
  • Lookup:查詢環節
  • Transform:轉化環節
  • Joins:連接環節
  • Scripting:腳本環節

在覈心對象中,我們利用輸入、輸出來實現數據的傳輸,主要涉及到的操作有:
這裏寫圖片描述
這裏寫圖片描述

場景分析

要設計轉換首先要明確具體的使用場景,我公司同步的核心業務就是將國內每日變動的敏感數據(卡片數據)同步到國外,同時將國外的數據變動同步回國內,而這個變動僅僅只涉及到修改,新增的變動邏輯由國內數據庫來完成。
這裏我們僅分析卡片數據來作爲例子。首先卡片具有密碼這一屬性,國內工廠,國外工廠都會定期對其進行修改,修改操作同時會影響到卡片密碼變更時間以及卡片狀態等信息,明確了這一點設計同步邏輯便得心應手了。

同步邏輯設計

kettle對事務的控制比較差,因此數據的同步需要事先進行設計,與其他表關聯程度低的數據優先進行同步,存在外鍵依賴關係的,則優先同步被參照表,從而避免髒數據的產生。

在kettle的每一個轉換中,都存在步驟的概念,步驟也決定了數據的流向。數據就像在管道中的流一樣,從一個步驟流向另一個步驟。而對於轉換的劃分,建議將數據庫中關聯度比較高的業務歸在同一轉換下,一方面便於管理控制,另一方面有利於數據流的高效利用。

在同步過程中,首先第一步需要讀出源表的相關數據,這是輸入步驟,利用核心對象中的表輸入來完成,可以通過自定義SQL來決定所需要的源數據,然後,確定輸出的對象,也就是目標連接,目標庫,目標表,以及目標操作;目標操作有多種,包括刪除、插入/更新、數據同步等。插入/更新是將流中的數據按照規則與目標表數據比對,如果目標表存在該數據,則更新配置的字段,否則進行插入操作;而數據同步操作主要是將目標表數據完全清空,再將流裏的數據全部插入。

源表讀出來的數據可以流向多個輸出步驟,因此可以執行如下操作,在A表中讀出數據後,分別插入B,C,D表,而不需要每插入一張表就查詢一次。

信息配置

首先需要新建一個transformation,即轉換。然後配置相應的庫連接信息,確定源庫、目標庫。通過配置主對象樹下的DB連接,分別建立源庫、目標庫相關數據,並且可以進行連接測試以檢測連接的有效性。
這裏寫圖片描述

數據流轉

根據業務邏輯,我們設計我們需要的數據流程過程,以剛纔卡片數據爲例,我們首先需要從國內庫中讀取卡片數據,這裏使用到了“表輸入”
通過輸入流獲取到了數據,這時候可以根據自己業務對其進行處理,在本例中,我使用到了字段篩選分支數據阻塞

  1. 字段篩選:本例中將卡片字段ID提取出來作爲下一個輸入流的篩選過濾條件,具體使用只需要新增“轉換-字段選擇”即可。而下一個輸入流在設置SQL語句時,將需要嵌入的條件設置爲?,並勾選“替換SQL語句裏的變量”即可從上一步驟獲取條件值。
  2. 分支:分支顧名思義,就是一個switch/case,新增“流程-switch/case”,然後設置用於判斷的字段,並給出不同條件的下一步驟即可。
    這裏寫圖片描述
  3. 數據阻塞:執行到這一步會阻塞所有步驟,直到這一步完成。

最後數據需要進行插入/更新來同步到國外數據庫中,我們新建“輸出-插入/更新”,然後配置流入的數據值,流出的字段值,以及條件即可。在“輸出”這一操作樹中有“插入/更新”和“更新”兩個操作,二者區別在於“插入/更新”會根據設置w的比較條件進行判斷,如果比較條件成立,則進行更新,否則進行插入。
插入/更新

最終轉換流程預覽:
最終轉換

執行調度

利用kettle的job來進行轉換的調度,job可以用於定製各個轉換執行的順序,控制執行流程,利用job的時間控制,來決定其執行的規則。
我們通過文件-新建-作業(job)即可設置我們自己的調度,調度可以設置執行一次,也可以設置循環執行。如果直接使用kettle job的start進行計劃執行,則需要kettle客戶端一直保持運行,如果遇到服務器意外重啓就比較麻煩,這時候我們可以把他配置爲windows bat,然後利用windows計劃任務調度執行。這裏給個demo參考一下:

@echo off

set  KETTLE_PATH=D:\pdi-ce-6.1.0.1-196\data-integration

set JOB_PATH=D:\pdi-ld\pdi-ce-6.1.0.1-196\data-integration\works\國內到國外



rem 默認T+1方式參數傳遞

CALL %KETTLE_PATH%\Kitchen.bat  -file=%JOB_PATH%\intoout.kjb >>%JOB_PATH%\log\syn_%date:~0,4%%date:~5,2%%date:~8,2%.log

job

郵件簡介

在調度和轉換執行過程中,我們需要知道具體的執行結果,最好是能有一個通知,這時候我們就用到了郵件功能。
我們可以通過選擇job核心組件樹中的“發送郵件”來實現郵件發送功能。幾個主要字段一定要進行配置,否則發送失敗。
1)、地址欄
收件人地址:填寫收件地址,多個收件地址,可以使用空格隔開
發件人地址:填寫發件地址
回覆名稱:發件人名,建議填寫
2)、服務器欄
SMTP服務器
端口號
3)、郵件消息
主題、註釋建議填寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章