在DWH中直接链接事实表可以吗?
据我了解,在星系模式中事实表没有链接,它们只是有共同的维度表。但是,如果有一个 DWH 模式假设直接链接它们呢?
IMO,他们不应该这样做,即使他们可以。事实表通常很大,可能有数十亿行,并以一定的粒度保存度量。
链接两个或多个事实表可能需要连接数十亿行表,这将非常昂贵。
如果您需要链接不同事实表中的事实(所有维度都是通用的),您最好只进行一次联接,存储结果并使用结果表。如果这可以在 ETL 级别完成,您可以批量加入,那就更好了。
如果您将事实连接到两个表中,其中一个表的维度是另一个表的超集,那么您最好将最精细的事实聚合到另一个表的粒度并应用上面的解决方案。
如果两组维度都不是另一组维度的超集,那么您可能需要在共同级别上聚合这两个维度。
我的立场背后的原因是,我宁愿拥有存储冗余并避免查询时间计算,也不愿让我的用户等待很长时间才能让这些连接产生结果。此外,非常大的连接需要大量内存,这通常比存储更昂贵。
最后,请记住,DWH 通常包含由 ETL 进程加载的数据。它们批量运行,并且可以在每次运行时检查一致性,这与 OLTP 不同,在 OLTP 中,避免多次写入相同数据对于防止不一致至关重要。
对此的看法不同,您很可能会对此事有不同的看法。最后,这两种方法都有其优点和缺点,研究这两种方法并选择你最舒服的一种。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)