ETL過程的第一步就是從不同的數據源抽取數據並把數據存儲在數據的緩存區。這個過程的主要挑戰就是初始加載數據量大和比較慢的網絡延遲。在初始加載完成之后,不能再把所有數據重新加載一遍,我們需要的只是變化的數據。識別出變化的數據,並抽取這些變化的數據稱為變化數據捕獲(Change Data Capture) 或CDC。
Kettle之基於時間戳的CDC實現實例
實現思路:
首先表中要有數據更新的時間戳如:最后一次修改的時間(XGSJ),如果有創建時間的話更好;
作為例子假設有一張表名字為customer,表中有記錄時間戳的字段CJSJ(創建時間)和XGSJ(修改時間);
然后基於時間戳的表CDC_TIME,表中有兩個字段一個是LAST_LOAD時間戳,記錄最后一次加載的時間戳,另一個字段是CURRENT_LOAD記錄當前加載的時間戳(表中首先插入一條很早以前的時間),在加載開始的時候,首先將CURRENT_LOAD設置為當前時間;
最后在加載結束之后將CURRENT_LOAD的時間更新到LAST_LOAD字段上。
創建時間戳的表
CREATE TABLE [CDC_TIME] ( [LAST_LOAD] datetime NULL , ---最后一次加載的時間 [CURRENT_LOAD] datetime NULL ----當前加載的時間 );
----插入默認值
INSERT INTO CDC_TIME VALUES('1971-01-01 00:00:01','1971-01-01 00:00:01');
實現DEMO:該實例主要實現的點有
1、設置JOB級別的變量;
2、CDC動態抽取數據;
3、單列拆分多行記錄;
JOB: CDC_ZFJL
TRAN:INIT_CDC_TIME
TRAN:CDC_ZFJL_DATA
TRAN:CDC_ZFSJ_END
!由於這個涉及到具體項目的使用:該實例完成的是實時捕獲數據到結果表,由於中間涉及到一個數據的處理步驟,所以看上去比較繁瑣了。大家只要明白這個數據抽取的原理就可以了。