我正在研究一个SSIS项目,该项目每月从Excel中提取数据并加载到Oracle数据库中。我计划从Excel文件中提取数据并加载到Oracle阶段表中。我将使用merge语句,因为每个月加载的数据是12个月的滚动列表,并且数据可以更改,因此当记录不匹配时需要能够插入或在记录不匹配时可以更新。我的控制流程如下所示:截断舞台表(以清除上一次运行的程序包中的表)--->从Excel到舞台表的数据流--->在Oracle中合并到目标表。
我的问题是源Excel文件中的数据没有任何唯一的列来选择主键或复合键,因为新记录可能完全相同(但非常不可能)信息。我无法利用“始终以身份生成的身份”,因为我的SSIS程序包需要在每个作业开始时进行截断,以清除阶段表。这样会在新的负载中生成相同的ID号,并在目标表中产生问题。
关于如何解决此问题的任何建议?
答案 0 :(得分:0)
欢迎使用SO和ETL。在SSIS中,不使用暂存表,而使用两个源:Excel文件和现有生产表。对两个输入进行排序,然后对唯一标识符执行合并联接。从那里开始,使用派生的列转换来添加一个名为“ Action”的新列,该列将根据联接键是否为NULL将行标记为INSERT / UPDATE / DELETE。所以:
从那里,使用条件拆分将行拆分到OLE DB目标(INSERT)或SQL命令(UPDATE或DELETE)。现在,您可以从流程中删除舞台环境和MERGE命令。假设SSIS在单独的服务器上运行,这具有从SQL Server删除ETL负载的额外好处。
注意:排序转换可以删除重复项。