我正在使用 group_concat / string_agg (可能是varchar),并希望确保bigquery不会丢弃任何连接的数据。
答案 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));