0

我有 8个代理键,我需要在维度表上查找并填充事实表。我为维度表创建了8 个查找,然后使用合并连接排序组件将数据合并到一个结果集以插入到维度表中。我担心的是在我进行插入之前会发生很多合并和排序,并且性能不好。实现我上面解释的最佳方法是什么?

4

2 回答 2

2

另一种选择是采用 ELT(提取加载转换)方法 - 将数据加载到临时表中,运行单个 UPDATE 语句以批量应用代理键,然后加载到事实表中。这可能会更快,并且如果任何列发生更改,您可以在 UI 中单击和处理更少的 SSIS 元数据。

即具有三个维度的简单示例,包括未知(-1)

  1. 通过 SSIS 将数据加载到暂存中
  2. 通过 SSIS 运行它

    更新 StagingTable SET SK1 = ISNULL(Dimension1.SK,-1), SK2 = ISNULL(Dimension2.SK,-1), SK3 = ISNULL(Dimension3.SK,-1) FROM StagingTable LEFT OUTER JOIN Dimension1 ON Dimension1.SRCKey = StagingTable .SRCKey 左外连接 Dimension2 ON Dimension2.SRCKey = StagingTable.SRCKey 左外连接 Dimension3 ON Dimension3.SRCKey = StagingTable.SRCKey

  3. 通过 SSIS 运行它或使用数据流

    插入事实表(SK1、SK2、SK3、Fact) 从 StagingTable 中选择 SK1、SK2、SK3、Fact

尽管这里有一些手工编码,但我个人更喜欢在 SSIS 用户界面中单击和弄乱并忍受查找组件的性能。

于 2013-10-10T00:48:28.927 回答
0

建议您关注排序和合并。相反,为什么不使用实际Lookup Component值将您的事实值转换为实际键。基本上,将已有的查询合并到查找合并源中,然后将它们放入查找组件中。仅包含匹配或返回代理键所需的列。

在下面无法阅读的图像中,您可以看到一个加载我们每日员工人数事实表的包。在更糟糕的情况下,总共有 10 次查找,但您可以观察到没有执行任何排序或合并操作。41M 行查找从 2 到 1M 行不等的任何地方。查找将向现有行添加额外的列,我相信这与您表达的愿望相同的功能没有排序和合并连接的负面性能影响。

在此处输入图像描述

于 2013-10-09T21:07:34.803 回答