Sql 在数据仓库中使用代理密钥的利弊

Sql 在数据仓库中使用代理密钥的利弊,sql,performance,etl,data-warehouse,surrogate-key,Sql,Performance,Etl,Data Warehouse,Surrogate Key,代理密钥是一种存在于我们的书中多年的机制,我讨厌再次讨论它。每个人都在谈论使用代理密钥而不是业务密钥的好处。甚至Microsoft Analysis Services表格和Microsoft PowerBI表格模型也在使用代理键。上面提到的两个平台都允许您使用一列连接维度和事实,因此是一个代理键,因为在现实生活中很难拥有一个业务键 作为BI架构师,最近几年我与AnalysisServices多维和表格一起工作,我有多维项目,每晚在数据仓库中管理高达500GB的数据。我面对的事实是,在具有数百万条

代理密钥是一种存在于我们的书中多年的机制,我讨厌再次讨论它。每个人都在谈论使用代理密钥而不是业务密钥的好处。甚至Microsoft Analysis Services表格和Microsoft PowerBI表格模型也在使用代理键。上面提到的两个平台都允许您使用一列连接维度和事实,因此是一个代理键,因为在现实生活中很难拥有一个业务键

作为BI架构师,最近几年我与AnalysisServices多维和表格一起工作,我有多维项目,每晚在数据仓库中管理高达500GB的数据。我面对的事实是,在具有数百万条记录的表中,有5-6个联合和8-10个联接

问题来了,使用代理键,为了能够知道维度键,我们需要进行额外的连接。因此,如果我们希望能够将N个维度(尚未与构造表达式中的事实连接)与单个事实“关联”,我们需要在数据仓库中添加N个连接

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

这些年来,我一直试图用我早期喝的咖啡来阅读facts表达式,比如读报纸,删除未使用的专栏、联合、联接,并尽可能降低复杂性以节省ETL过程时间


我们完全理解,我们将节省查询数据仓库和语义层的时间,但是ETL呢,我遗漏了一些东西?

关于您的问题,我有一些想法

  • 如果不使用SKs,那么如何处理源系统的自然/业务键(即使它们是单个列)不唯一的SCD2维度
  • DW的目的是使查询数据更容易、更快。如果你认为任何问题都需要付出一定的努力来解决,那么你就可以选择在解决方案所需的活动链中应用这一努力。如果您想减少查询的工作量,那么您需要增加数据准备的工作量,即ETL