分区和全表之间的bigquery性能差异

时间:2012-10-29 07:00:42

标签: google-bigquery

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

非常感谢

1 个答案:

答案 0 :(得分:1)

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

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

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

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