在数据仓库中使用代理键的优缺点

Using Surrogate Keys in Data Warehouse Pros and Cons

代理键是一种在我们的书中存在多年的机制,我不想再次讨论它。每个人都在谈论使用代理键而不是业务键的好处。甚至 Microsoft Analysis Services Tabular 和 Microsoft PowerBI Tabular Models 也在使用代理键。提到的两个平台都使您能够使用一列连接维度和事实,因此是代理键,因为在现实生活中很难拥有一个单一的业务键。

最近几年作为 BI 架构师,我使用 Analysis Services Multidimensional 和 Tabular,我在 Multidimensional 中有项目,每晚在 DataWarehouse 中管理高达 500GB 的项目。我面对的事实来自 5-6 个联合和 8-10 个包含数百万条记录的表之间的连接。

问题来了,使用Surrogate Key,为了事实能够知道维度Key我们需要做一个额外的Join。因此,如果我们希望能够将 N 个维度(尚未与构造表达式中的事实相关联)与单个事实“相关联”,我们需要在 DataWarehouse 中添加 N 个附加连接。

让我们以前面的例子为例,所以对于这个特定的事实,我们需要 5-6 个联合 + (8-10 + N) 个连接,这增加了复杂性,想象一下一旦我们需要关联这个会发生什么具有 10-15 个维度的事实来获取代理键。

这些年来,我一直在尝试使用我早期的咖啡来阅读我的事实表达式,就像阅读报纸一样,并删除未使用的列、联合、连接,并使一切都减少复杂性以节省 ETL 处理时间。

完全理解我们将节省查询DataWarehouse和语义层的时间,但是ETL呢,我错过了什么?

关于你的问题的一些想法...

  1. 如果您不使用 SK,那么您将如何处理来自源系统的 natural/business 键(即使它们是单个列)不唯一的 SCD2 维度?
  2. DW 的目的是使查询数据变得更容易、更快捷。如果您认为任何问题都需要付出一定的努力才能解决,那么您可以选择在产生解决方案所需的一系列活动中应用这些努力。如果您想减少查询的工作量,那么您需要增加数据准备工作,即您的 ETL