Google bigquery 分区和完整表之间的bigquery性能差异

Google bigquery 分区和完整表之间的bigquery性能差异,google-bigquery,Google Bigquery,我在25个分区(每个分区40米)的联合中有大约10亿行,在一个完整的表中。 我运行一个计算不同计数的查询,通常它会在1-4个分区上查找数据。(查询是动态的)基于where子句。 相同的查询在所有表的并集上运行30秒,而在整个表上运行50秒。处理相同的GB。 首先,出色的表现:-) 问题是: 1.使用union vs 1 big table的性能方面的原则是什么?分区表总是更快吗? 2.如果它只使用很少的分区,为什么它要为相同的GB向我收费?这意味着我必须动态构造查询以选择正确的分区。。。这是一种

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


非常感谢您描述的这两个查询,BigQuery仍然处理您的所有数据。对于联合查询,数据的布局可能有点优势,但这并不意味着BigQuery所做的工作更少——因此,您的费用是相同的。如果您可以如您所建议的那样,构造一个只使用所需分区的查询,那么处理的数据将更少,因此成本也会更低

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

我要说的是,经验法则是,如果您可以通过计算出需要哪些分区来预过滤数据,那么您的情况会更好,因为您可以运行成本更低的查询。在较小的数据上,您的查询不太可能较慢,而且通常可能更快


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

对于您描述的两个查询,BigQuery仍然处理您的所有数据。对于联合查询,数据的布局可能有点优势,但这并不意味着BigQuery所做的工作更少——因此,您的费用是相同的。如果您可以如您所建议的那样,构造一个只使用所需分区的查询,那么处理的数据将更少,因此成本也会更低

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

我要说的是,经验法则是,如果您可以通过计算出需要哪些分区来预过滤数据,那么您的情况会更好,因为您可以运行成本更低的查询。在较小的数据上,您的查询不太可能较慢,而且通常可能更快


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

很抱歉延迟,每个表分片50万行进行分区,根据月份的长短,我可以指定其中的一些,但这会使SQL复杂化,因为范围是动态的。很抱歉延迟,每个表分片50万行,根据月份的长短,我可以指定其中的一些,但这会使SQL变得复杂,因为范围是动态的。