需要帮助理解SSIS中scd的替代方案



我正在从事一个数据仓库项目,该项目将涉及集成来自多个源系统的数据。我已经设置了一个SSIS包,它填充客户维度,并使用缓慢变化的维度工具来跟踪客户的更新。

我遇到了一些问题。举个例子:

源系统A可能有这样的记录:

名字,姓氏,邮政编码Jane, Doe, 14222

源系统B可能有一个相同客户端的记录,看起来像这样:

名字,姓氏,邮政编码Jane, Doe, Unknown

如果我首先从系统A导入记录,我将拥有名字、姓氏和种族。太好了。现在,如果我从系统B导入客户记录,我可以进行模糊匹配,以识别这是同一个人,并使用缓慢变化的维度工具来更新信息。但在这种情况下,我将失去邮政编码,因为"未知"将覆盖有效数据。

我想知道我是否以错误的方式处理这个问题。SCD工具似乎没有提供任何基于新数据是否有效有选择地更新属性的方法。合并语句会更好吗?我是否犯了一些根本的设计错误,而我却没有意识到?

谢谢你的建议!

根据我的经验,内置的SCD工具不够灵活,无法处理此需求。

无论是几个MERGE语句,还是一系列UPDATEINSERT语句,都可能为您提供最大的逻辑和性能灵活性。

对于SCD类型2的MERGE语句可能有模型,但这里是我使用的模式:

Merge Target
  Using Source
    On Target.Key = Source.Key
  When Matched And
    Target.NonKeyAttribute <> Source.NonKeyAttribute
    Or IsNull(Target.NonKeyNullableAttribute, '') <> IsNull(Source.NonKeyNullableAttribute, '')
  Then Update Set SCDEndDate = GetDate(), IsCurrent = 0
  When Not Matched By Target Then 
    Insert (Key, ... , SCDStartDate, IsCurrent)
    Values (Source.Key, ..., GetDate(), 1)
  When Not Matched By Source Then
    Update Set SCDEndDate = GetDate(), IsCurrent = 0;
Merge Target
  Using Source
    On Target.Key = Source.Key
  -- These will be the changing rows that were expired in first statement.
  When Not Matched By Target Then
    Insert (Key, ... , SCDStartDate, IsCurrent)
    Values (Source.Key, ... , GetDate(), 1);

相关内容

  • 没有找到相关文章

最新更新