BigQuery:加入集群字段

Posted

技术标签:

【中文标题】BigQuery:加入集群字段【英文标题】:BigQuery: join on clusters fields 【发布时间】:2021-05-31 01:02:14 【问题描述】:

我正在尝试通过使用聚簇表来优化我们的 BigQuery 模型。

我正在测试这些场景:

    聚簇表连接聚簇表(通过簇字段连接) 非聚簇表联接 非聚簇表(通过与方案 1 相同的字段联接)

不应用任何 where 条件场景 1 和 2 具有相同的成本(处理的时间和字节数)。 当我通过集群字段 1 应用条件时,速度快 4 倍且成本更低。

只有在查询中使用条件时,聚集字段才有用?而不是加入? 在这种情况下,如果我在没有任何条件的情况下执行连接,无论有没有集群,性能都是一样的

如何改进 BigQuery 中两个表之间的联接?

编辑 2021-05-31

添加两个作业的查询执行计划:

    Clustered

    Non-clustered

【问题讨论】:

看看这两个作业的查询执行计划(带有/o 聚集字段)会很有帮助。这可以解释为什么性能没有提升。一个问题:加入时,你是否保持相同的聚集字段顺序?另外,需要加入全表吗?因为如果先过滤再JOIN,可以提高性能和成本。 Alvaro,我用两个执行计划更新了帖子。关于加入全表的需要:我正在测试如何执行一个典型的查询,所以对于这个测试是必要的。 【参考方案1】:

来自docs,我想说的是,当您在加入期间使用另一列进行比较时,集群将被简单地忽略。

现在,为了优化连接,您可以尝试在连接之前减少数据。例如,尝试过滤表,或预先聚合它们以尽可能多地减少数据。最后,还要注意连接上表的顺序。从大到小排序。

【讨论】:

以上是关于BigQuery:加入集群字段的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 集群字段用法/值不清楚

BigQuery:在标准 SQL 中使用重复/数组 STRUCT 字段加入?

Bigquery 整数范围分区

如何加入 Firebase 和 BigQuery

Google Bigquery 外部加入 UNNEST

按最近日期加入 BigQuery 中具有重复记录的表