GROUP by 查询(三元组)的 BigQuery 内部错误

Posted

技术标签:

【中文标题】GROUP by 查询(三元组)的 BigQuery 内部错误【英文标题】:BigQuery internal error on a GROUP by query (trigrams) 【发布时间】:2015-10-11 23:17:00 【问题描述】:

我尝试使用 LIMIT 100 进行以下查询,并得到“查询执行期间超出资源”(otichyproject1:job_1mpw4aDtTHmbduBdKSBu5ty1DXY),因此我尝试将其输出到新表中并允许较大的结果。它运行的时间更长,但因“内部错误”而失败 (otichyproject1:job_6pFUlj2AzdROUyAU8nZ9dGdo3ms)。

SELECT 
 ngram, decade, SUM(freq) totalfreq, SUM(books) totalbooks 
FROM 
 trigram.trigrams3 
GROUP BY 
 ngram, decade

表格 trigrams3 源自公共 trigram 数据集,应该更小(尽管 trigrams 上的 COUNT 给出奇怪的结果)。

关于如何进行这项工作的任何想法?

【问题讨论】:

你能公开分享数据集吗?那我就可以试试了 我添加了所有经过身份验证的用户:可以查看数据集 - otichyproject1:trigram。有问题的表是 trigrams3,我从谷歌的公共 trigram 数据集派生如下:(插入 trigrams1)SELECT ngram, cell.value year, cell.match_count freq, cell.volume_count books FROM [publicdata:samples.trigrams] (插入 trigrams2) SELECT * FROM trigram.trigrams1 WHERE REGEXP_MATCH(ngram, r'^[A-Za-z\'\-\s]+$') (插入 trigrams3) SELECT ngram, LEFT(year)十年,频率,来自 trigram.trigrams2 的书籍谢谢! 【参考方案1】:

首先,让我们看看结果集有多大:

SELECT COUNT(*)
FROM (
SELECT ngram, decade, SUM(freq) totalfreq, SUM(books) totalbooks 
FROM  [otichyproject1:trigram.trigrams3]
GROUP EACH BY ngram, decade
)

837,369,607 - 将近十亿个寄存器要输出,这就是我们需要“allowLargeResults”的原因。

请注意,我使用了“GROUP EACH”。 “EACH”不应该是必需的,因为它已经退出了,但它在这里提高了我的运行时间。

与 LIMIT 100 相同,适用于“EACH”:

SELECT 
 ngram, decade, SUM(freq) totalfreq, SUM(books) totalbooks 
FROM 
 trigram.trigrams3 
GROUP EACH BY 
 ngram, decade
LIMIT 100

如果我尝试使用“EACH”和“AllowLargeResults”,将所有结果输出到新表的查询只需 20 秒即可运行:

SELECT ngram, decade, SUM(freq) totalfreq, SUM(books) totalbooks 
FROM  [otichyproject1:trigram.trigrams3]
GROUP EACH BY ngram, decade

所以这个问题的简短答案是:继续使用“GROUP EACH”(现在)。

【讨论】:

像魅力一样工作,谢谢!并赞扬反应时间:) 一旦我看到一个共享数据集,我就忍不住要帮忙:)

以上是关于GROUP by 查询(三元组)的 BigQuery 内部错误的主要内容,如果未能解决你的问题,请参考以下文章

mysql 可以group by 两个字段吗

mysql group by 能用到索引么

group by查询每组时间最新的一条记录

oracle中group by用法

Ecto查询在datetime字段上执行group_by MONTH并返回元组列表

09_MySQL笔记-组函数-GROUP BY-LIMIT-多表连接查询-子查询-UNION-索引-视图-存储过程