1

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

多谢

4

1 回答 1

1

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

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

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

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

于 2012-10-29T15:36:48.153 回答