我有8个代理键,我需要在维度表上查找并填充事实表。我为维度表创建了 8次查找,然后使用合并连接和排序组件将数据合并到一个结果集中以便插入尺寸表。我担心的是,在插入之前会发生很多合并和排序,并且性能不佳。实现我上面解释的最佳方法是什么?
答案 0 :(得分:1)
另一种方法是采用ELT(Extract Load Transform)方法 - 将数据加载到临时表中,运行单个UPDATE语句以批量应用代理键,然后加载到事实表中。这可能会更快,如果任何列发生更改,您可以在UI中点击和搞乱SSIS元数据。
即。一个三维的例子,包括未知(-1)
通过SSIS
运行更新StagingTable 组 SK1 = ISNULL(Dimension1.SK,-1), SK2 = ISNULL(Dimension2.SK,-1), SK3 = ISNULL(Dimension3.SK,-1) 从StagingTable LEFT OUTER JOIN Dimension1 ON Dimension1.SRCKey = StagingTable.SRCKey LEFT OUTER JOIN Dimension2 ON Dimension2.SRCKey = StagingTable.SRCKey LEFT OUTER JOIN Dimension3 ON Dimension3.SRCKey = StagingTable.SRCKey
通过SSIS运行或使用数据流
INSERT INTO factTable(SK1,SK2,SK3,Fact) 选择SK1,SK2,SK3,事实 来自StagingTable
虽然在这里有一些手动编码,但我更喜欢这样点在SSIS用户界面中点击并弄乱它们并且提高查找组件的性能。
答案 1 :(得分:0)
建议您关注排序和合并。相反,为什么不使用实际的Lookup Component
将您的事实值转换为实际的键。基本上,将您已有的查询用于查找合并源,并将它们放入查找组件中。仅包含匹配所需的列或返回代理键。
在下面不可读的图片中,您可以看到一个加载我们每日人数事实表的包。在更糟糕的情况下总共有10次查找,但您可以观察到没有执行排序或合并操作。 41M行可以查找从2到2的任意位置,只有少量的1M行。查找将向现有行添加其他列,我相信这与您表达的功能相同,但没有排序和合并连接的负面性能影响。