SSIS 实现update,delete,insert
在数据库ETL时,ETL 有两种类型的数据表提取:全部源提取,其中无法标识更改的或新的记录;递增提取,其中只提取新的记录和更改的记录。
在这里我将简单介绍一下利用SQL Server 2005 集成服务(SSIS)如何实现全部源提取的思路,如果不能理解,欢迎发邮件和我交流。
案例:
在源系统上,有些记录包含在表中,该表不标识新的或已修改的记录,因此 ETL 过程必须比较源表和目标表之间的记录以标识更改发生的时间。
然后正确地处理插入或更新。
思路如下:
第一步: 对源表和目标表使用全部合并连接和完整数据集。全部连接有助于标识库存记录添加到源中的时间或完全删除的时间。
使用配置为全部连接的 Merge Join 转换满足此要求。
注:由于要使用Merge Join 转换,必须是有序的,如果用order排序组件在大数据量时效率不高,因此可以事先用order by排序。
为此,数据流需要注意:源已排序以及排序所应用的列和方向。这是在 Source Connection 的 Advanced Editor(高级编辑器)中完成的。
在 Input and Output Properties(输入和输出属性)选项卡上,请查看 OLE DB Source Output(OLE DB 源输出)的顶级属性,有一个名为 IsSorted 的属性,它需要设置为 True。
第二,需要通过 Output Columns(输出列)容器中的 SortKeyPosition 属性指定排序的列。然后数据流将认可此排序。
第二步:利用Conditional Split分别拆分三个和一个默认的如下所示:
Insert 为目标表主键为空;
Delete 为源目标表主键为空;
Unchanged 为源和目标表为发生变化的分别比较每列;
Update 剩下的也就是默认的就是需要Update的数据;