bigquery输出中group_concat / string_agg的最大限制是多少?

时间:2017-07-19 16:56:19

标签: google-bigquery

我正在使用 group_concat / string_agg (可能是varchar),并希望确保bigquery不会丢弃任何连接的数据。

2 个答案:

答案 0 :(得分:4)

如果特定查询内存不足,BigQuery不会丢弃数据;你会得到一个错误。您应该尝试将行大小保持在100MB以下,因为除此之外,您将开始出错。您可以尝试使用如下示例创建一个大字符串:

#standardSQL
SELECT STRING_AGG(word) AS words FROM `bigquery-public-data.samples.shakespeare`;

此表中有164,656行,此查询创建一个包含1,168,286个字符(大小约为兆字节)的字符串。如果您在单个执行节点上运行的查询需要的数量超过数百兆字节,那么您将开始看到错误:

#standardSQL
SELECT STRING_AGG(CONCAT(word, corpus)) AS words
FROM `bigquery-public-data.samples.shakespeare`
CROSS JOIN UNNEST(GENERATE_ARRAY(1, 1000));

这会导致错误:

Resources exceeded during query execution.

如果单击UI中的“说明”选项卡,则可以在构建STRING_AGG的结果时看到第1阶段发生故障。在这种情况下,字符串的长度为3,303,599,000个字符,或大小约为3.3 GB。

答案 1 :(得分:1)

添加Elliot的答案 - 如何修复:

此查询(Elliot's)失败:

#standardSQL
SELECT STRING_AGG(CONCAT(word, corpus)) AS words
FROM `bigquery-public-data.samples.shakespeare`
CROSS JOIN UNNEST(GENERATE_ARRAY(1, 1000));

但是你可以限制连接的字符串数量以获得有效的解决方案:

#standardSQL
SELECT STRING_AGG(CONCAT(word, corpus) LIMIT 10) AS words
FROM `bigquery-public-data.samples.shakespeare`
CROSS JOIN UNNEST(GENERATE_ARRAY(1, 1000));