BigQuery 在小表上为 COUNT(*) 提供“响应太大”
Posted
技术标签:
【中文标题】BigQuery 在小表上为 COUNT(*) 提供“响应太大”【英文标题】:BigQuery gives "Response too large" for COUNT(*) over small tables 【发布时间】:2013-01-14 16:23:41 【问题描述】:我有一个包含以下 7 个每日汇总表的数据集,每个汇总表都很小:
summary_broad_20130104_hourly 199 k rows 8395 KB
summary_broad_20130105_hourly 198 k rows 8347 KB
summary_broad_20130106_hourly 197 k rows 8319 KB
summary_broad_20130107_hourly 194 k rows 8190 KB
summary_broad_20130108_hourly 197 k rows 8338 KB
summary_broad_20130109_hourly 201 k rows 8490 KB
summary_broad_20130110_hourly 202 k rows 8534 KB
在对所有这些表 (04-10) 执行简单的select count(*)
时,我得到“响应太大”:
$ bq query "select count(*) from summary_broad_20130104_hourly,summary_broad_20130105_hourly,summary_broad_20130106_hourly,summary_broad_20130107_hourly,summary_broad_20130108_hourly,summary_broad_20130109_hourly,summary_broad_20130110_hourly"
BigQuery error in query operation: Error processing job '987928363675:job_bb504ce6ea31416db3f8762d3c244d93': Response too large to return.
但是,如果我将查询限制为表 04-06,我会得到成功的响应:
$ bq query "select count(*) from summary_broad_20130104_hourly,summary_broad_20130105_hourly,summary_broad_20130106_hourly"
+--------+
| f0_ |
+--------+
| 594721 |
+--------+
但如果我扩展到表 04-07,那么我可以再次重现错误:
$ bq query "select count(*) from summary_broad_20130104_hourly,summary_broad_20130105_hourly,summary_broad_20130106_hourly,summary_broad_20130107_hourly"
BigQuery error in query operation: Error processing job '987928363675:job_22ea222b4b0549a98bb9e90f1a2ac539': Response too large to return.
这是一个错误,还是我做错了什么?查询的数据很小(在 04-07 的情况下约为 40MB),我希望 select count(*)
是一个节点本地聚合,中间数据量可以忽略不计。
【问题讨论】:
由于你没有连接条件,它试图构造7个表的叉积,其大小是它们所有大小的乘积。这大约是 10^37 行。 第二个查询中的答案似乎是错误的。199k * 198k * 197k
接近于8*10^15
。
实际上,bigquery 将,
的含义从join
更改为union
,这就是为什么count(*)
是加法而不是乘法的原因。在bigquery docs 中搜索“union”。
可能是一个错误。等待谷歌工程师的回答。
【参考方案1】:
事实上,这是一个错误。我们正在调查它,可以在本地复制它,并希望尽快修复。
【讨论】:
顺便说一句,如果可行,短期的解决方法是导出并重新导入表。以上是关于BigQuery 在小表上为 COUNT(*) 提供“响应太大”的主要内容,如果未能解决你的问题,请参考以下文章