1. 程式人生 > >kettle入門(七) 之kettle增量方案(一)全量比對取增量-依據唯一標示

kettle入門(七) 之kettle增量方案(一)全量比對取增量-依據唯一標示

ctp 不變 net inf not content 變量 orm const



引:
ods有個project表來自於上遊系統,數據量不大 十幾萬,下遊系統須要此數據,而且須要每天提供截止當天的增量數據 要求每條數據給出數據變化時間及標示,即數據若是插入 有插入時間和插入標示 若是改動 有改動時間和改動標示 若是刪除需邏輯刪除、有刪除標示且有刪除時間



解決:
kettle的轉換ktr裏有一個圖元叫做合並記錄。能夠把兩個表輸入分為源和目的依據唯一標示 進行全量比對。由此。我們得到增量的數據流,再寫入到RDBMS裏,即能夠實現該需求。實現功能的ktr例如以下圖:


技術分享

1 輸入源 合並記錄

上圖。最左側是兩個表輸入,上面一個cpmis 是上遊系統 以下一個被 merge rows擋住了。名字是odso


cpmis

SELECT
ITEMID,
ITEMCODE,
ITEMPLANCODE,
ITEMNAME,
DEMANDID,
ITEMPROPERTY,
COMPANYID,
MANAGELEVELID,
SPECIALSMALLTYPEID,
PLANTYPEID,
CONSTRUCTPROPERTYID,
AREAID,
ASSISTANTTYPEID,
CONSTRUCTTYPEID,
FEEDEPARTMENTID,
..... FROM PROJECT_AH.ITEMINFO order by ITEMID


odso


SELECT
ITEMID,
ITEMCODE,
ITEMPLANCODE,
ITEMNAME,
DEMANDID,
ITEMPROPERTY,
COMPANYID,
MANAGELEVELID,
SPECIALSMALLTYPEID,
PLANTYPEID,
CONSTRUCTPROPERTYID,
AREAID,
ASSISTANTTYPEID,
CONSTRUCTTYPEID,
FEEDEPARTMENTID,
..... FROM odso.ITEMINFO order by ITEMID


2 值映射

例如以下圖, 將輸入源與目的源的每一個字段數據依據唯一字段比較後 到值映射圖元,使用字段名 為起的後面用到的一個變量名(可隨意起)。源值列為系統默認 1 代表輸入源與目標源比較後刪除的數據標誌 2 是輸入源新增 3 是輸入源更新 4是不變 目標值 是自己起的名字 能夠依據須要不變 或改動 技術分享

3 第一次過濾無效記錄

例如以下圖,條件 flagfield is not null (後面沒顯示完),若條件成立發送給下一步zh_check_date,若不成立發送給空操作。 技術分享

4 新增數據推斷add2

例如以下圖,zh_check_date 為獲取當前的系統時間變量。

add2 圖元打開為 畫圈的圖 左側的地方 ,條件 flagfield = add_rec ,若成立及發送數據到中間畫圈的add圖元,若不成立則 發送數據到mod_del圖元 (矩形紅框) 如果為true數據到 add圖元,打開 即是下圖右側 部分 填寫須要插入的數據字段 再到insert圖元 ,就可以把輸入源比目標源多的新數據更新到目標表來 而且加上時間戳。


技術分享


5 改動或刪除 mod_rec

例如以下圖,如果數據從add2發送而來。 打開矩形框 mod_del 條件flagfield = mod_rec 若true 則發送到 update mapping 若flase 則發送到delete mappinig 。如果是更新,則右側 的查詢keyword 是 更新的比較字段 即是一開始合並記錄的比較字段 ,更新字段就是 除了比較字段之外的其它字段。這樣數據就能夠從 輸入源更新到目標源。

技術分享


6 刪除數據 delete mapping

例如以下圖。如果數據流到了 delete mapping 。則 僅僅須要依據比較字段把 目標表的時間戳更新 和 狀態更新為del_rec就可以,下圖zh_check_type 為flag_field的值

技術分享


7 數據結果

zh_check_type 和check_date已更新為

技術分享

kettle入門(七) 之kettle增量方案(一)全量比對取增量-依據唯一標示