查找代理键和填充事实表
Posted
技术标签:
【中文标题】查找代理键和填充事实表【英文标题】:Look up surrogate keys and Populate fact table 【发布时间】:2013-10-09 20:51:50 【问题描述】:我有 8 个代理键,我需要在维度表上查找并填充事实表。我为维度表创建了 8 次查找,然后使用 merge join 和 sort 组件将数据合并到一个结果集以插入维度表。我担心的是在我进行插入之前会发生很多合并和排序,并且性能不好。实现我上面解释的最佳方法是什么?
【问题讨论】:
【参考方案1】:另一种选择是采用 ELT(提取加载转换)方法 - 将数据加载到临时表中,运行单个 UPDATE 语句以批量应用代理键,然后加载到事实表中。如果任何列发生变化,这可能会更快,并且您可以在 UI 中单击和处理更少的 SSIS 元数据。
即一个具有三个维度的简单示例,包括未知(-1)
-
通过 SSIS 将数据加载到暂存中
通过 SSIS 运行它
更新暂存表 放 SK1 = ISNULL(Dimension1.SK,-1), SK2 = ISNULL(Dimension2.SK,-1), SK3 = ISNULL(Dimension3.SK,-1) 从暂存表 左外连接 Dimension1 ON Dimension1.SRCKey = StagingTable.SRCKey 左外连接 Dimension2 ON Dimension2.SRCKey = StagingTable.SRCKey 左外连接 Dimension3 ON Dimension3.SRCKey = StagingTable.SRCKey
通过 SSIS 运行或使用数据流
插入事实表(SK1、SK2、SK3、事实) 选择 SK1、SK2、SK3、事实 FROM 暂存表
虽然这里有一些手工编码,但我个人更喜欢在 SSIS 用户界面中点击和乱搞并忍受查找组件的性能。
【讨论】:
【参考方案2】:建议您关注排序和合并。相反,为什么不使用实际的Lookup Component
将您的事实值转换为实际的键。基本上,将已有的查询合并到查找合并源中,然后将它们放入查找组件中。仅包含匹配或返回代理键所需的列。
在下面这张不可读的图片中,您可以看到一个加载我们每日员工人数事实表的包。在更糟糕的情况下,总共有 10 次查找,但您可以观察到没有执行任何排序或合并操作。 41M 行查找从 2 到 1M 行不等的任何地方。查找将向现有行添加额外的列,我相信这与您表达的愿望相同的功能没有排序和合并连接的负面性能影响。
【讨论】:
每个查找组件只能查找一列,这意味着我仍将进行 8 次查找,然后必须合并可能需要排序的数据。 是的,如果您有 8 个不同的维度表,那么是的,您将需要 8 个不同的查找。您将不需要进行排序或合并,因为这些查找将在线添加值。 Lookup Transformation以上是关于查找代理键和填充事实表的主要内容,如果未能解决你的问题,请参考以下文章