SSIS如何向插入的行添加查找键

时间:2014-01-14 17:20:58

标签: ssis

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

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

    数字5失败,因为我不知道如何等待ADO NET目的地完成...

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

    enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

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

相反,您应该尝试在之前的加载中构建所有尺寸,以便在到达事实载荷时,所有尺寸都已存在。

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

答案 1 :(得分:0)

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语句更改高速缓存。