實現目標:通過ODI獲取一個沒有時間戳的子表(qb_bw)的增量資料,而主表(qb_tb)有一個rksj入庫時間,且主表和子表之間通過ID關聯。目標表名是qb_bw1.
設計原理:通過在ODI的mapping中關聯主表和子表,然後在主表的rksj上設定時間過濾,最後將子表的欄位對映到目標表中。在此設計中,需要有一個變數,此變數在第一次執行時,使用一個初始值,這樣第一次執行會獲取此初始值後的所有源資料到目標表,然後根據目標表的rksj更新此變數值,從而得到目標表上最大的時間戳,再基於此時間點去獲取源表的記錄,從而實現每次執行都可以得到新增的資料。
建立變數
新建一個變數儲存目標表入庫時間的最大值。
基於文字型別定義變數。
使用SQL獲取目標表時間欄位的最大值。
建立mapping
主表的資料基於時間欄位過濾,再跟子表關聯後載入子表的資料到目標表。
主表的過濾條件設定
主表和子表的關聯條件設定
目標表上新增的入庫時間欄位,從源端主表獲取。
以上對映建立完成之後,可以試執行,確保邏輯是正確的,理論上會基於變數的初始值獲取源端的資料載入到目標表。即獲取rksj>’2018-05-11’的所有資料載入到目標表。
建立程式包
再建立相關的資料處理流程,即迴圈獲取增量。新建一個“程式包”
拖拉剛才建立的變數兩次,以及剛才的mapping.
第一個變數上設定為“宣告變數”
第二個變數為“重新整理變數”
以上程式包已經可以手工執行,每次執行獲取相應的增量資料到目標表。
定時排程
儲存“程式包”,並生成場景。
在生成的場景上,新建一個排程(前提是後臺的agent在正常執行)
設定場景開始執行的時間
設定場景迴圈的間隔
在agent配置處,更新排程資訊。
現在即可在檢視日誌處,看到指定間隔的時間之後,有該程式包處理的日誌,以及每次執行後獲取的增量記錄數等資訊。