CDC[Change Data Capture] 也就是变化数据捕捉 是ETL设计中最重要的一个环节。不同的厂商开发出来的工具都有自己的特定组件来实现CDC的模式,但其实这些实现都有些泛化。原因很简单,CDC要基于不同的表结构和设计来实现的,基于时间变化的就需要源表有时间类型字段,甚至更敏感一些的还需要Trigger来实现CRUD操作留下的痕迹以便实现CDC。

还有就是数据流的模式 是多对一还是一对多的ETL也很重要,尤其是一对多,标记每一个目标段是否成功的标记模式就显得很重要了,哪些点成功Import到数据了 哪些没有 都需要一个很直观很方便的表示方法供我们查询。

我现在使用的CDC模式比较通用一点 不基于任何工具的任何组件,其目的是为了使用通用性,假设有一天你现在使用的ETL工具没有厂商和社团为其Support的话 你怎么办?所有转换和JOB大改?以便适应新的工作? 得了吧。。。


Kettle CDC


简单得来看 就是一句配合着十进制和二进制转换的SQL

SELECT SUBSTRING(LPAD(CONV(255 ,10,2),10,'0'),1,1) ,

SUBSTRING(LPAD(CONV(255 ,10,2),10,'0'),2,1) ,

SUBSTRING(LPAD(CONV(255 ,10,2),10,'0'),3,1) ,

LPAD(CONV(255 ,10,2),10,'0');

这样看是否会浅显一点?中间的255就是一个十进制数字 在一对多模式下 默认就是一个0 意义是该数据还处于初始化状态,具体是一对多少,就看自己的需求了。