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 内部错误的主要内容,如果未能解决你的问题,请参考以下文章