首页 > Linux操作系统 > Linux操作系统 > 增量数据抽取的策略及方法介绍
增量数据抽取是指在进行ETL操作时,只抽取源数据中发生改变的地方,没有发生变化的以抽取数据不进行重复的抽取,增量抽取与完全抽取及更新相对。
1.只抽取发生变化的地方;
2.相对于完全抽取更快捷,处理量减少;
3.采用增量抽取需要在与数据装载时的更新策略相对应;
当源系统数据量浩大,或需要在相对实时的情况下装载业务系统的数据时,完全抽取几乎不太可能,此时应该考虑合理的增量抽取策略。
增量抽取的策略在Bill Inmon的经典著作《Building the Data Warehouse》里已有所提及,主要包括以下方法:
1)时间戳及增量文件
在处理增量抽取时,时间戳法和增量文件法是相对简单高效的方法,如果源系统的数据记录中已经提供了这些特征数据,则应优先采用相应增量抽取策略。
2)触发器
当源系统的数据是基于数据库存储时,可在源数据库管理系统中设置触发器侦听源数据的增删改事件以监控数据的增量变化,并进一步采取措施将增量变化反映到目标数据中。
具体措施有:
A. 使用配套DTS工具直接捕获数据变化事件并实时刷新目标数据;
B. 与时间戳法或增量文件法结合,在数据变化事件处理逻辑中设置时间戳或产生增量记录;
C. 在捕获到数据变化时间时将增量数据追加到stage table中;
设置触发器的方法逻辑复杂并且会影响源数据库系统的效率。
3)HASH法
快照比较法的改进版本。
在每次抽取时,针对需要侦测变化的内容在Stage区或目标区做快照,快照的方式不是简单的保留快照期的数据记录,而是将其分组(比如按表分组),对每一组数据只记录改组中每一条记录的所有列组合的Hash值;下次快照时,提取源数据,计算各组Hash值,并根据键值与对应Hash值比较,如果不相等则对应记录的某列数据发生了变化。
采用适当的编码方式,hash值中还可以记录较为详细的信息,比如各记录的列及数据变化的操作类型(增、改等)。对于删除的处理则依赖于键值。
4)源数据库系统增量机制CDC(change data capture)
A.SQLServer
为了克服使用时间戳及触发器的弊端,SQLServer2008中提供了更改跟踪与变更数据捕获两种跟踪数据变化的方法,这两种方法都是基于日志文件的增量策略。
其中,变更数据捕获通过获取进行 DML 更改的方面和更改的实际数据,记录历史更改信息;而更改跟踪则只是捕获更改了表行这一事实,但不捕获更改的数据。
详细信息可进一步参考如下资源:
http://msdn.microsoft.com/en-us/library/bb933994.aspx
http://msdn.microsoft.com/zh-cn/library/cc280519.aspx
http://msdn.microsoft.com/zh-cn/library/bb895315.aspx
http://msdn.microsoft.com/zh-cn/library/bb933994.aspx
http://blog.csdn.net/zjcxc/archive/2009/03/10/3975644.aspx
http://blog.csdn.net/zjcxc/archive/2009/02/23/3924959.aspx
B. Oracle
1) 物化日志结合物化视图的方法(Materialized)
在源系统中建立物化日志记录增删改等数据变更操作;在目标系统中建立物化视图将物化日志转变为变更数据。
2)CDC
Oracle 9i之后提供CDC技术,以现成的管理框架及较小运行效率代价支持对变化数据的捕获,除了可用来支持增量ETL之外,还可以用来支持其他应用,比如实时数据获取并图形化应用。
Oracle CDC包括两种方式:
A. 同步变化数据捕获(底层基于触发器);
B. 异步变化数据捕获(基于审计日志、流机制);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12122734/viewspace-688884/ ,如需转载,请注明出处,否则将追究法律责任。