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(*) 提供“响应太大”的主要内容,如果未能解决你的问题,请参考以下文章

小表上的仅索引扫描非常慢

BigQuery“复制表”不适用于小表

在小表和大表之间的内部连接期间,索引被忽略

小表上的简单 SQL 查询执行时间过长

表中创建索引的最佳行数

使用python在excel表上为我的不同数据框赋予标题