数据仓库模式:直接链接DWH中的事实表是否可以?

问题描述 投票:1回答:3

可以直接链接DWH中的事实表吗?

据我所知,在galaxy模式中,事实表没有链接,它们只有公共维度表。但是,如果有DWH架构假设直接链接它们?

data-warehouse
3个回答
2
投票

IMO,他们不应该,即使他们可以。事实表通常是巨大的,可能有数十亿行,并且在某个颗粒上保持测量。

链接两个或多个事实表可能需要连接几个数十亿行表,这将太昂贵。

如果您需要在不同的事实表中链接事实(所有维度都很常见),最好只进行一次连接,存储结果并使用生成的表。如果可以在ETL级别完成,那么您可以批量加入。

如果你在两个表中加入事实,其中一个维度是另一个的超集,那么最好将最细粒度的事实聚合到另一个粒度并应用上面的解决方案。

如果两个维度集都不是另一个维度的超集,那么您可能需要在公共级别聚合这两个维度。

我的立场背后的原因是我宁愿在存储中有冗余并避免查询时间计算,而不是我的用户等待很长时间才能产生结果。此外,非常大的连接需要大量内存,这通常比存储更昂贵。

最后,记住DWH通常有ETL进程加载的数据。它们是批量运行的,可以检查每次运行的一致性,这与OLTP不同,在OLTP中,避免多次写入相同数据对于防止不一致至关重要。

关于这一点的意见不同,你很可能对此事有不同的看法。最后,两种方法都有其优点和缺点,研究两种方法并选择最适合的方法。


2
投票

不,直接链接事实表是不行的。

首先,如果您正确地为事实表建模,您将无法以有意义的方式链接它们。唯一的例外是具有1:1关系的事实表,但问题是 - 也许它们应该被建模为一个事实表开始。

其次,直接链接事实表违背了维度建模背后的核心思想 - 模型应该反映基础业务的结构。通常,在维度模型中,事实表表示特定的业务流程,维度表示其上下文。这是OLTP和维度数据库之间的关键区别 - OLTP系统经过优化,可高效,可靠地捕获事务,而维度模型则经过优化,可以查询数据并从中获得商业意义。混淆这两个概念是错误的。


1
投票

答案显而易见NO,根据定义,通过事实表中的外键引用的任何表都是维度表。

在Kimballs模型的另一方面,事实和维度之间没有严格的分界线 - 表格可以根据上下文发挥两种作用。

因此,例如,包含服务使用的表是具有诸如时间,位置,合同等维度的事实表。

但合同本身可以被建模为事实表,即包含正在改变合同的交易的表格,以及诸如时间,客户,评级模型等的维度。(您可以称之为缓慢改变维度 - 但这只是替代描述到事实表)。

但最重要的是,如果连接两个“事实”表的模型描述业务良好,稳定,易于加载,抵抗失败并支持高性能报告查询,那么答案显然是肯定的,这是严格的模型。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.