【问题标题】:difference in bigquery performance between partition and full table分区和全表在 bigquery 性能上的差异
【发布时间】:2012-10-29 23:36:48
【问题描述】:

我在 25 个分区(每个 40m)联合和 1 个完整表中有约 10 亿行。 我运行一个计算不同计数的查询,通常它会在 1-4 个分区上找到数据。 (查询是动态的)基于 where 子句。 相同的查询在所有表的联合上运行 30 秒,而在全表上运行 50 秒。处理相同的 GB。 首先,出色的表现:-) 问题是: 1. 使用 union vs 1 big table 在性能方面的原则是什么?分区表总是更快吗? 2. 如果它只使用几个分区,为什么要按相同的 GB 向我收费?这意味着我将不得不动态构造查询以选择正确的分区……这是一种负担。 (我知道您没有类似 SQL 的优化器,但如果我需要管理分区,我不应该从中受益吗?)

非常感谢

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    对于您描述的两个查询,BigQuery 仍会处理您的所有数据。对于联合查询,数据的布局可能会有些优势,但这并不意味着 BigQuery 所做的工作会减少 - 因此您需要支付相同的费用。如果您可以按照您的建议构建一个仅使用所需分区的查询,那么要处理的数据将更少,因此成本更低。

    很难预测将所有数据放在一个表中还是将其分散到多个表中并执行联合查询是否会提高性能。对于这个特定的查询,听起来联合更快,对于其他查询,例如那些可能正在做更多工作的查询,它可能会更慢。

    我想说一个经验法则是,如果您可以通过确定需要哪些分区来预先过滤数据,那么您的情况会更好,如果只是因为您可以运行更便宜的查询。对于较小的数据,您的查询不太可能会变慢,而且它们通常可能会更快。

    我还应该指出,改进在查询中选择多个表的语法(例如,让人们在查询中指定日期范围或通配符)是我们最常要求的功能之一,我们很有可能会很快就能做到这一点。你的表是如何分区的?怎样才能更轻松地为您的查询指定正确的表?

    【讨论】:

    • 抱歉耽搁了,通过分片每个 50m 行的表分区,基于月或多或少,我可以指定其中的一些,但这会使 SQL 复杂化,因为范围是动态的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2013-04-12
    • 2013-11-24
    • 2022-10-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多