我们知道所谓ETL步骤其实就是把数据从源系统加载到数据仓库或数据集市的操作,并在此过程中实现数据的清洗及转换。除了数据的清洗转换之外,一次ETL的过程中另一个十分重要的部分就是:本次抽取能不能直接定位到上次数据处理后变动的数据,即增量抽取(IncrementalLoad)。
取决于源系统的结构,增量抽取有多种实现方式:
1. 源系统具有时间戳
a) 如果源系统有时间戳,并且没有物理删除操作而是使用软删除,那么我们可以直接使用时间戳定位到新增、更新以及删除的数据
b) 如果源系统具有时间戳但是会发生物理删除操作,那么我们就只能定位到新增及更新的数据,对于删除的数据则无能为力,那么我们就只能使用下面介绍的方法来实现增量
2. 源系统没有时间戳
a) 如果源系统没有时间戳,并且不允许在源系统上使用CDC或trigger等捕获变更数据的方式,那么在数据从数据源加载到Staging表的步骤我们无法使用增量抽取,但是我们可以在Transformation表中添加时间戳,这样在Transformation步骤通过数据对比的方式来识别出增、删、改的数据来填充或更改时间戳,这样在数据从Transformation表加载到数据仓库的时候可以实现增量处理。这样的好处是:在Loading步骤需要处理的数据量很少,对DWH的锁需求就少,因为对于使用数据仓库的业务用户影响就小。
b) 如果源系统允许开启CDC,那么另一种简单的办法就是结合使用SQLServer的CDC功能以及SSIS的CDC控件来实现数据增量处理
原文地址:http://yubowang.blog.51cto.com/8929119/1575287