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
!由于这个涉及到具体项目的使用:该实例完成的是实时捕获数据到结果表,由于中间涉及到一个数据的处理步骤,所以看上去比较繁琐了。大家只要明白这个数据抽取的原理就可以了。