ODI基於源表時間戳字段獲取增量數據

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

設計原理:經過在ODImapping中關聯主表和子表,而後在主表的rksj上設置時間過濾,最後將子表的字段映射到目標表中。在此設計中,須要有一個變量,此變量在第一次運行時,使用一個初始值,這樣第一次運行會獲取此初始值後的全部源數據到目標表,而後根據目標表的rksj更新此變量值,從而獲得目標表上最大的時間戳,再基於此時間點去獲取源表的記錄,從而實現每次運行均可以獲得新增的數據。app

 

建立變量

新建一個變量保存目標表入庫時間的最大值。ide

clip_image001

基於文本類型定義變量。spa

clip_image002

使用SQL獲取目標表時間字段的最大值。設計

clip_image004

 

建立mapping

主表的數據基於時間字段過濾,再跟子表關聯後加載子表的數據到目標表。日誌

clip_image006

主表的過濾條件設置orm

 

clip_image008

主表和子表的關聯條件設置blog

clip_image010

 

目標表上新增的入庫時間字段,從源端主表獲取。ip

clip_image012

 

以上映射創建完成以後,能夠試運行,確保邏輯是正確的,理論上會基於變量的初始值獲取源端的數據加載到目標表。即獲取rksj>’2018-05-11’的全部數據加載到目標表。ci

建立程序包

再創建相關的數據處理流程,即循環獲取增量。新建一個程序包get

clip_image014

拖拉剛纔建立的變量兩次,以及剛纔的mapping.

clip_image016

 

第一個變量上設置爲聲明變量

clip_image018

第二個變量爲刷新變量

clip_image020

以上程序包已經能夠手工執行,每次執行獲取相應的增量數據到目標表。

定時調度

保存程序包,並生成場景。

clip_image021

在生成的場景上,新建一個調度(前提是後臺的agent在正常運行)

clip_image022

設置場景開始運行的時間

clip_image024

 

設置場景循環的間隔

 

clip_image026

 

agent配置處,更新調度信息。

clip_image028

 

如今便可在查看日誌處,看到指定間隔的時間以後,有該程序包處理的日誌,以及每次運行後獲取的增量記錄數等信息。

相關文章
相關標籤/搜索