【问题标题】:SSIS how to add lookup key to inserted rowsSSIS如何将查找键添加到插入的行
【发布时间】:2014-01-14 17:20:58
【问题描述】:

我有一个问题,我需要为数据流中的所有行设置维度键。

  1. 我使用查找组件来查找记录的维度键
  2. 没有维度键的记录(查找不匹配输出)被重定向到不同的输出,因为它们需要插入。
  3. 不匹配的输出是多路的
  4. 新记录被插入到维度中。
  5. 在插入记录后应该执行第二个查找组件

    第 5 次失败,因为我不知道如何等待 ADO NET 目标完成...

除了将流转储到原始文件并使用其他数据流来恢复任务之外,还有什么方法可以解决这个问题?

【问题讨论】:

  • 短语“迟到维度”将与您的问题相关。我自己还没有找到满意的答案
  • 您可能需要为第 5 步创建一个新的 DFT。
  • 为什么必须在“插入记录后”进行第二次查找?是因为您依赖于在目标表中生成的身份,还是因为您实际上是在查找目标表?为什么不能将查找放在 ADO NET Destaintion 之前?为了进一步讨论,它可能有助于对屏幕截图中的步骤进行编号,以便我们参考它们。经过多年的 SSIS 存在,恕我直言,它仍然不如 ELT 方法(在数据库中完成的工作不在包中)
  • @billinkc 不完全是“迟到”维度,因为维度数据与事实同时到达;)
  • @ElectricLlama 是的,我相信 SQL 服务器身份会生成维度键。因为我使用的是维度建模,所以我需要维度键,因此对插入的行重复查找。

标签: ssis


【解决方案1】:

我想我明白你现在在做什么。通常,您会首先在其自己的数据流中完全加载维度,然后在完全完成后,使用已填充的维度加载事实。您似乎正试图在一个数据流中加载事实和维度。

您在一个数据流中执行此操作的唯一原因是,如果您无法从事实中分离出不同的维度,并且您的事实来源如此庞大,以至于您不想检查两次。通常,您可以在没有大量事实源的情况下预加载维度,但情况并非总是如此。这取决于您的源数据。

您可以使用 SEQUENCE (http://technet.microsoft.com/en-us/library/ff878091.aspx) 在一个数据流中执行此操作。这是一种无需将数字插入表格即可自动生成数字的方法,但您的维度需要依赖序列 而不是 的标识。但是您需要在某种内联脚本组件中调用它,否则您可能会欺骗查找组件。会很慢。

相反,您应该尝试在之前的加载中构建所有维度,这样当您到达事实加载时,所有维度都已经存在。

简而言之,问题是:您真的需要迈出一大步吗?您可以在之前的数据流中预先构建您的维度吗?

【讨论】:

    【解决方案2】:

    Thomas Kejser 写了一篇博文,为这个早到的事实/迟到的维度问题提供了一个很好的解决方案。 http://blogs.msdn.com/b/sqlcat/archive/2009/05/13/assigning-surrogate-keys-to-early-arriving-facts-using-integration-services.aspx

    基本上,您使用带有部分缓存的第二次查找。每当部分查找缓存接收到不匹配的行时,它将调用 SQL 语句并获取数据以填充查找缓存。如果在该 SQL 语句中使用存储过程,可以先将其添加到维度表中,然后使用 SELECT 语句更改缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多