变化数据捕获经验谈
在数据仓库系统中,一个很重要的目的就是保留数据的历史变化信息。而变化数据捕获(Change Data Capture,CDC)就是为这个目的而产生的一项技术。变化数据捕获常用的方法有:1)文件或者表的全扫描对比,2)DBMS日志获取,3)在源系统中增加触发器获取,4)基于源系统的时间戳获取,5)基于复制技术的获取,6)DBMS提供的变化数据捕获方法等。其中,由DBMS提供变化数据捕获的方法是大势所趋,即具体的捕获过程由DBMS来完成。
像银行、电信等很多行业的操作记录生成后就不会改变,只有像客户、产品等信息会随时间发生缓慢的变化,所以通常的变化数据捕获是针对维度表而言的。Kimball对缓慢变化维的分析及应对策略基本上可以处理维度表的各种变化。
而对于一些零售行业,像合同表中的合同金额类似的数值在录入后是有可能会发生改变的,也就是说事实表的数据也有可能发生变化。通常对于事实表数据的修改属于勘误的范畴,可以采用类似缓慢变化维TYPE 1的处理方式直接更新事实表。笔者不太赞同对事实表的变化采用快照的方式插入一条新的事实勘误记录,这样会给后续的展现、分析程序带来太多的麻烦。
接下来要讨论的是笔者曾经遇到的一个颇为棘手的事实表数据改变的问题,该事实表的主键随表中某些数据的变化发生改变。以其中的一个合同表为例,该合同表的主键是由“供货单位编号”+“合同号”生成的智能主键,当其中的“供货单位编号”和“合同号”中任何一个发生变化时,该合同表的主键都会发生变化,给变化数据捕获带来了很大的麻烦。
项目中,笔者的处理方式是采用触发器的办法来实现变化数据捕获。具体的实现方式是:
文章来源于领测软件测试网 https://www.ltesting.net/