【问题标题】:Joining 3 larges tables into 1 table with 1 to many relationship in Google BigQuery在 Google BigQuery 中将 3 个大表加入 1 个具有一对多关系的表
【发布时间】:2022-01-11 00:21:15
【问题描述】:

我最近才开始使用 BigQuery,并且想将 3 个具有 1:many 关系的表(分别为 10M(事实)、20M 和 36M 行)连接到一个表中以在 Tableau 中使用。 对于如何在不遇到性能问题或任何其他考虑的情况下进行此操作,是否有任何建议或指导?

提前感谢您的帮助

【问题讨论】:

  • 您应该更详细地说明您的表格是什么样的,您期望什么类型的输出,以及到目前为止您为获得想要的结果而尝试了哪些操作。
  • 谢谢。准确地说,我想将主事实表 A(10M 记录)连接到表 B 和 C(分别为 20M 和 36M 记录)。 A 通过 1: many 关系链接到 B,B 通过 1: many 关系链接到 C。我的意图是使用连接来获得一个表。考虑到数据的大小,使用 join 是正确的方法还是有其他选择?

标签: join google-bigquery denormalization


【解决方案1】:

在您的情况下使用JOINS 是正确的方法。从它的样子来看(不知道你的表结构),你应该从:

   select 
     ct.some_thing as c_field, 
     bt.some_thing as b_field, 
     a.some_thing as a_field 
   from C ct 
   left join B bt on ct.some_field = bt.some_field 
   left join A at on bt.some_field = at.some_field 

【讨论】:

  • 谢谢@khan。我一定会试一试的。另外,我想知道将 JOINS 的结果存储在新表中的最佳方法是什么?如果有的话,这个过程可以在 BQ 内部自动化,以便可以定期刷新表吗?谢谢
  • 您可以在 BQ 中使用partitioned tables 来保存您的联接结果并将您的表格连接到分区表,以便一次查询一个分区的数据。您可以自动覆盖或附加到表中的分区。
  • 再次感谢。我已阅读分区表上的文档。虽然数据包含日期字段(可用于分区),但我想知道这是否适用于我的情况,因为目标是在报告中显示整个数据。谢谢。
  • 是的。如果 tableau 一次只查询一个特定的分区,那实际上可以节省扫描的字节数。
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
相关资源
最近更新 更多