- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 SSIS 中,如果传入的数据集对同一个业务 key 有多个记录,我如何在不使用 SCD 向导的情况下将其加载到具有 SCD 类型 2 的维度表。
样本数据集
Customer ID Name Segment Postal Code
1 James Corporate 50026
2 Andrew Consumer 33311
3 Steven Consumer 90025
2 Andrew Consumer 33306
3 Steven Consumer 90032
1 James Corporate 50087
3 Steven Consumer 90000
在我的例子中,如果我尝试使用其他 SSIS 组件(查找/条件拆分)加载维度表,所有记录都会在表中显示一个新行,因为它们都是同时进入的。
我将“CurrentFlag”作为当前记录的指示符。
在 SSIS 中,如果我有一个传入数据集,其中包含同一业务键的多个记录,我如何识别这些记录,并根据需要设置 CurrentFlag,无论目标表中的记录是否具有该业务键已经?
谢谢。
最佳答案
好的,这是一个巨大的简化,因为 SCD 的正确实现非常具有挑战性。你需要坐下来批判性地思考这个问题。我在下面的回答仅处理正在进行的日常处理 - 它没有解释如何处理正在重新处理的历史文件,这可能会导致具有不同有效开始和结束日期的重复记录。
根据定义,您将拥有一个现有的记录源组件(即从数据库表中查询)和一个传入数据源组件(即一个 *.csv 平面文件)。您将需要执行合并连接来识别新记录与现有记录。对于现有记录,您需要确定是否有任何列已更改(在派生列转换中执行此操作)。
您还需要包括 EffectiveStartDate 和 EffectiveEndDate 两列。
IncomingEffectiveStartDate = FileDate
IncomingEffectiveEndDate = 12-31-9999
ExistingEffectiveEndDate = FileDate - 1
关于 12-31-9999 的注释:这实际上是 Y10K 漏洞。但是,它允许用户在日期范围之间查询数据库,而无需在查询的日期范围之间有意识地在查询的 WHERE 子句中添加 ISNULL(GETDATE())。
这将防止列中的日期重叠,这可能会导致针对给定日期返回多条记录。
要确定记录是否已更改,请创建一个名为 RecordChangedInd 的 Bit 类型的新列。
(ISNULL(ExistingColumn1, 0) != ISNULL(IncomingColumn1, 0) ||
ISNULL(ExistingColumn2, 0) != ISNULL(IncomingColumn2, 0) ||
....
ISNULL(ExistingColumn_N, 0) != ISNULL(IncomingColumn_N, 0) ? 1 : 0)
然后,在您的拆分条件下,您可以创建两个输出:RecordHasChanged
(这将是一个 INSERT)和 RecordHasNotChanged
(这将是一个 UPDATE 以停用现有记录和插入)。
可以想象,您可以将两个输入路由到同一个 INSERT 目标。但是,您需要小心禁止更新记录的 ExistingEffectiveEndDate 值停用日期。
关于sql-server - SSIS::如何在不使用 SCD 向导的情况下在 SSIS 中实现 SCD 类型 2。当传入数据集对同一业务 key 有多个记录时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56071054/
我是一名优秀的程序员,十分优秀!