KDT#4 超大维度的变化数据捕获的一种方法
在数据仓库的建模中,有一种维度是超大维度,它有可能有100个以上的属性,有百万条以上的记录。例如,有些行业的客户维度。如果源系统能每天提供该表变化的信息当然是一件非常舒服的事情,但是,这通常是不可能的。
源系统一般会每天提供一个文件,文件里是客户表的全部信息。这就需要我们做变化数据分析,通过扫描整个文件和上一天文件的差异来进行变化数据捕获。对于一个超大的维度来说,这个比较过程是很麻烦的一件事情。
有一种技术可以用来解决这个问题,这种技术就是CRC校验算法(Cyclic Redundancy Checksum)。
先读取今天的文件中每一条客户记录,计算出每条记录的CRC码。与昨天计算的CRC码进行比较。如果一样,则这个客户记录就没有改变。如果不一样,可以直接生成一个代理键插入客户表(TYPE 2)或者直接更新客户维度表相应记录(TYPE 1)。这样就不需要比较每一个字段,由字段级比较上升为记录级比较,给ETL带来很大的方便。
CRC算法的具体实现在网上可以很容易的找到。