2014年6月23日 星期一

[SAP][Data Service] Change Data Capture (CDC) 異動數據記錄

在進行資料倉儲資料轉換時,使用 ETL 將所有交易資料轉入後,當資料量少時,當然可以在進行 ETL 前,先將目標資料表的資料清除再進行轉入的作業,但隨著時間的增加,資料可能是倍增的,而重複轉入不會再異動的資料也是非常沒有效率的一件事。

實務上常見的CDC實作方法很多,有些會根據 Timestamp欄位當作判斷異動資料的依據,有些則是以精心設計過的 Flag 指標為基準。

首先建立一個 JOB,點選工具列中的 Tools 下的 Variables ,會出現一個變數和參數的視窗。


JOB 的名稱會出現在 Context 中,Variables 和 Parameters  的使用範圍在同一個 JOB 內。


在 Global Variables 上按滑鼠右鍵選 Insert,修改 Name 為 $GV_STARTTIME,修改 Data type 為 datetime 格式。相同的方式建立 $GV_ENDTIME 全域變數。



 建立一個 Work Flow ,在 Work Flow 中增加一個 Script 物件。在 Script 物件右側加入一個 Data Flow,再加入一個 Script 在 Data Flow 右側。



在 SET_START_END_TIME 的 Script 中設定 Global Variables
$GV_STARTTIME ='2012.01.01 00:00:00';
$GV_ENDTIME = sysdate( );
按下檢查語法的按鈕,檢視是否有錯誤!!


開啟 UPDATE_CDC_TIME_TABLE 的 Script Editor ,這個 Script 用來重設在 CDC_Time 資料表中的 $GV_ENDTIME 值
MS SQL Sample
sql('EDW','DELETE FROM EDWADM.CDC_TIME');
sql('EDW','INSERT INTO EDWADM.CDC_TIME VALUES({$GV_ENDTIME})');

Oracle Sample
sql( 'EDW', 'delete from EDWADM.T8TIME');

sql('EDW','INSERT INTO EDWADM.T8TIME VALUES(to_date({$GV_ENDTIME},\'yyyy.mm.dd hh24:mi:ss\'))');

未完成的記錄

沒有留言: