具有多个传入记录的SSIS SCD向导

问题描述 投票:1回答:2

请原谅。我非常拼命地想要如何雄辩地提出这个问题。在这里做得不好。

在SSIS中,如果您有一个传入数据集,该数据集具有相同PK的多个记录(如日常处理方法中的日内记录),如何告诉SCD向导预期?

在我的情况下,即使我的所有字段都设置为“历史”,它们都显示为新的,因为它们都是同时进入的。

Example data:
BK, insertion depth, drill depth, bore depth
1, 1000, 1020, 1022
1, 1025, 1222, 1233
1, 1100, 1321, 1333
2, 1233, 1255, 1022
2, 2222, 3333, 3333
3, 1010, 900, 885

我在一份报告中得到了这个。它们都显示为基本负载的新功能。我有一个create_dt和end_dt作为我的开始和停止时间戳。 create_dt具有变量的system :: startdate。如何让SSIS中的SCD阶段识别这些,并根据需要添加时间戳,无论目标表中的记录是否已具有该PK?

谢谢。

更新#1:PK意味着BK。 PK是自动编号。

sql-server ssis
2个回答
0
投票

我暂时无法添加评论......

我想你在这里有一些误解。

  1. 如果PK是指主键,则主键定义每行的唯一性。根据定义,你不能有重复的密钥(没有作弊!),或者除非这是来自另一个表的外键?你是如何在SCD向导中声明业务密钥的?
  2. 你说你把所有字段都设置为“历史”?但是当SCD在“PK”上找到匹配时你不想要新的行吗?历史属性将保留所有先前记录的历史记录,因此您的记录将在SCD向导中添加为新记录。如果您不想要新记录,并且希望更新现有记录,则需要使用更改属性。

0
投票

这在SQL中比在SSIS中更容易处理。 SCD组件将在数据流启动之前将现有行加载到内存中。在评估行时,此记录集不会更新,因此如果您看到同一个businesskey的两条记录,它们将以相同的方式处理。

一种性能更好,更易于理解和维护的方法如下:

  1. 将源中的所有行插入到临时表中
  2. 在将更新维度表的包中调用proc
  3. 在proc中: 插入新的SCD行。查询应该比较目标和登台表,以确定之前没有看到过哪些行 插入历史SCD行。此查询应再次比较表以获取正确的记录。您可以使用窗口函数来计算开始和结束日期。
© www.soinside.com 2019 - 2024. All rights reserved.