连接由公共事实表连接的多个维度表的记录的最佳方法是啥

Posted

技术标签:

【中文标题】连接由公共事实表连接的多个维度表的记录的最佳方法是啥【英文标题】:what is the best way to join records of multiple dimension tables that are all connected by a common fact table连接由公共事实表连接的多个维度表的记录的最佳方法是什么 【发布时间】:2020-10-14 15:18:52 【问题描述】:

所以我有一个连接多个维度表的事实表。 假设我有客户、产品和日期的维度表。

客户有 id、name

产品有id、价格

日期有id,年份

事实表有 cus_id、pro_id 和 date_id。 所有 id 都是上表中的外键。

如果我想显示一个包含 cus_name、pro_price、date_year 的表格。

有效连接这些表的查询是什么。

谢谢。

为了回答我尝试过的评论中的问题,我还没有尝试过任何事情,只是因为我不知道怎么做。我了解如何连接客户和产品的表,如果它们通过外键关联,但是在这种情况下,客户只与事实表相关,我可以通过在 customer.id = fact_table 上的连接来连接客户和事实表。 cus_id,但我不知道如何将客户与产品联系起来。

谢谢

【问题讨论】:

最好的方法是使用JOIN。请您尝试过。 【参考方案1】:

选择 * 来自事实F

左加入客户 C ON C.id = F.cus_id

左连接产品 P ON P.id = F.pro_id

左加入日期 D ON D.id = F.date_id

因为你加入了 id 的他们不能是双重的 这将显示 Fact 表中的每一行(使用 ForEach 循环)

注意:这不会显示所有数据,因为并非所有日期都可能在 Fact 中(但因为我假设 Fact == invoice 所以不需要)

【讨论】:

谢谢,说的有道理,我对多重join非常缺乏经验,现在想起来,第一次join后,应该将其中一个维度表和事实表结合起来,然后我可以通过相关键加入其他人。我假设不是 select * 我可以选择 product.price 等(仅我想要的字段) 您可以使用 P.price 代替 product.price,因为您使用左关节定义了它

以上是关于连接由公共事实表连接的多个维度表的记录的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 整数范围分区

HIVE:在分区表中映射联接

包含来自多个源表的数据的维度中自然键的最佳实践

维度表、桥表和事实表连接

如何连接具有 1-N 关系的事实和维度表

结合事实表和维度表的SQL语句?