我最近一直在研究 Microsoft SQL Server 的列存储索引,我开始担心我的经验与行业经验不符。列存储索引旨在使聚合变得容易。人们经常说,出于这个原因,它们非常适合事实表。
这让我感到不安。根据我的经验,事实表不是聚合的。我制作的每个事实表的列表都是“主键后跟几个维度列,后跟我们存储的有关主键的每一点信息”的形式。然后它们被转储到 PowerBI 或 ThoughtSpot 等 BI 工具中,因此非技术人员可以根据维度进行筛选并找到他们想知道的任何信息。它们可能会不时聚合,但这肯定不是表格的主要用途。我预计这样的表格会有超过 100 列。
我所描述的表设计和访问模式是否符合事实表的预期?或者我所描述的是一种完全不同类型的表,而我不知道它的名称?
不,这只是一张非规范化的表。
在遵循经典星型模式设计模式的正确建模数据仓库中,事实表和维度表应分开。维度表通常是与您的数据对象(特别是事实表的度量)相关的描述性信息的唯一列表,也称为定性数据。事实表是定量数据,也称为度量本身,通常是用于分析目的的数值数据。
通常,事实以合理的程度分解存储,以便可以针对不同的维度组合以不同的程度进行聚合。预先聚合事实使得无法运行分析查询并以较低级别的粒度回答问题。 以下是更多详细信息和示例。
我不确定您当前的设计如何处理多个维度组合,也许您在同一个表中为同一维度重复了行,并且它的每种组合都用于其他维度?
是的,这在很大程度上是正确的。它们通过在列级别压缩数据来帮助提高聚合和分析查询的性能,甚至更重要的是,它们能够利用批处理模式操作来满足这些查询。