轉載:http://blog.csdn.net/xiaohai798/article/details/45364561
ods有個工程表來自於上游系統,數據量不大 十幾萬,下游系統需要此數據,並且需要每天提供截止當天的增量數據 要求每條數據給出數據變化時間及標示,即數據若是插入 有插入時間和插入標示 若是修改 有修改時間和修改標示 若是刪除需邏輯刪除、有刪除標示且有刪除時間
解決:
kettle的轉換ktr裏有一個圖元叫做合併記錄,可以把兩個表輸入分爲源和目的根據唯一標示 進行全量比對。由此,我們得到增量的數據流,再寫入到RDBMS裏,即可以實現該需求。實現功能的ktr如下圖:
1 輸入源 合併記錄
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 值映射
3 第一次過濾無效記錄
4 新增數據判斷add2
5 修改或刪除 mod_rec
如下圖,假設數據從add2發送而來, 打開矩形框 mod_del 條件flagfield = mod_rec 若true 則發送到 update mapping 若flase 則發送到delete mappinig ,假設是更新,則右側 的查詢關鍵字 是 更新的比較字段 即是一開始合併記錄的比較字段 ,更新字段就是 除了比較字段之外的其他字段。這樣數據就可以從 輸入源更新到目標源。
6 刪除數據 delete mapping
如下圖,假設數據流到了 delete mapping ,則 只需要根據比較字段把 目標表的時間戳更新 和 狀態更新爲del_rec即可,下圖zh_check_type 爲flag_field的值
7 數據結果