Google BigQuery 无法处理更大的结果集 "Response too large to return" 或 "Resources exceeded during query execution"

Google BigQuery unable to process larger result set getting "Response too large to return" or "Resources exceeded during query execution"

我目前正在 C# 应用程序中处理大型 table(~105M 记录)。

  1. 当使用 'Order by' 或 'Order Each by' 子句查询 table 时,出现 "Resources exceeded during query execution" 错误。

  2. 如果我删除 'Order by' 或 'Order Each by' 子句,那么我会收到 Response too large to return 错误。

这是两个场景的示例查询(我使用的是维基百科 public table)

  1. SELECT Id,Title,Count(*) FROM [publicdata:samples.wikipedia] 按 Id、标题顺序对每个进行分组按 ID、标题描述

  2. SELECT Id,Title,Count(*) FROM [publicdata:samples.wikipedia] 按 Id, title

这是我的问题

  1. Big Query Response 的最大大小是多少?
  2. 我们如何select查询请求中的所有记录而不是'Export Method'?

1。 Big Query Response 的最大大小是多少?

正如在 Quota-policy 查询中提到的那样,最大响应大小:压缩 10 GB(当 return 处理大型查询结果时无限制)

2。我们如何select查询请求中的所有记录而不是'Export Method'?

如果您计划 运行 一个可能 return 更大结果的查询,您可以在 job configuration.

中将 allowLargeResults 设置为 true

return 大结果的查询将需要更长的时间来执行,即使结果集很小,并且受制于 additional limitations:

  • 您必须指定目的地 table。
  • 您不能指定顶级 ORDER BY、TOP 或 LIMIT 子句。这样做会抵消使用 allowLargeResults 的好处,因为无法再并行计算查询输出。
  • Window 函数只有在与 PARTITION BY 子句结合使用时才能 return 大型查询结果。

详细了解如何分页以获得结果 here and also read from the BigQuery Analytics book, the pages that start with page 200, where it is explained how Jobs::getQueryResultsmaxResults 参数和 int 的阻塞模式一起工作。

更新:

查询结果大小限制 - 有时,很难知道压缩后的 10 GB 数据表示。

当您 运行 在 BigQuery 中进行正常查询时,响应大小限制为 10 GB 的压缩数据。有时,很难知道压缩后的 10 GB 数据手段。它会压缩 2 倍吗? 10倍?结果被压缩在 它们各自的列,这意味着压缩比往往非常 好的。例如,如果您有一列是一个国家的名称,那么 可能只有几个不同的值。当你只有几个不同的 值,这意味着没有很多唯一信息,并且该列 通常会很好地压缩。如果您 return 加密数据块,它们将 可能不会很好地压缩,因为它们大多是随机的。 (这在上面链接的书第 220 页上有解释)