ODI基於源表時間戳欄位獲取增量資料

margiex發表於2018-06-03

實現目標:通過ODI獲取一個沒有時間戳的子表(qb_bw)的增量資料,而主表(qb_tb)有一個rksj入庫時間,且主表和子表之間通過ID關聯。目標表名是qb_bw1.

設計原理:通過在ODImapping中關聯主表和子表,然後在主表的rksj上設定時間過濾,最後將子表的欄位對映到目標表中。在此設計中,需要有一個變數,此變數在第一次執行時,使用一個初始值,這樣第一次執行會獲取此初始值後的所有源資料到目標表,然後根據目標表的rksj更新此變數值,從而得到目標表上最大的時間戳,再基於此時間點去獲取源表的記錄,從而實現每次執行都可以得到新增的資料。

 

建立變數

新建一個變數儲存目標表入庫時間的最大值。

clip_image001

基於文字型別定義變數。

clip_image002

使用SQL獲取目標表時間欄位的最大值。

clip_image004

 

建立mapping

主表的資料基於時間欄位過濾,再跟子表關聯後載入子表的資料到目標表。

clip_image006

主表的過濾條件設定

 

clip_image008

主表和子表的關聯條件設定

clip_image010

 

目標表上新增的入庫時間欄位,從源端主表獲取。

clip_image012

 

以上對映建立完成之後,可以試執行,確保邏輯是正確的,理論上會基於變數的初始值獲取源端的資料載入到目標表。即獲取rksj>’2018-05-11’的所有資料載入到目標表。

建立程式包

再建立相關的資料處理流程,即迴圈獲取增量。新建一個程式包

clip_image014

拖拉剛才建立的變數兩次,以及剛才的mapping.

clip_image016

 

第一個變數上設定為宣告變數

clip_image018

第二個變數為重新整理變數

clip_image020

以上程式包已經可以手工執行,每次執行獲取相應的增量資料到目標表。

定時排程

儲存程式包,並生成場景。

clip_image021

在生成的場景上,新建一個排程(前提是後臺的agent在正常執行)

clip_image022

設定場景開始執行的時間

clip_image024

 

設定場景迴圈的間隔

 

clip_image026

 

agent配置處,更新排程資訊。

clip_image028

 

現在即可在檢視日誌處,看到指定間隔的時間之後,有該程式包處理的日誌,以及每次執行後獲取的增量記錄數等資訊。

相關文章