Google BigQuery无法处理更大的结果集,导致“响应太大而无法返回”或“查询执行期间超出资源”

时间:2015-07-08 05:42:28

标签: google-bigquery

我目前正在使用C#应用程序中的大表(~105M记录)。

  1. 使用“Order by”或“Order Each by”子句查询表时,我收到“查询执行期间超出资源”错误。

  2. 如果我删除'Order by'或'Order Each by'子句,那么我的响应太大而无法返回错误。

  3. 以下是两个场景的示例查询(我使用的是Wikipedia公共表)

    1. SELECT Id,Title,Count(*)FROM [publicdata:samples.wikipedia] EACH by Id,title order by Id,Title Desc

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

    3. 以下是我的问题

      1. Big Query Response的最大大小是多少?
      2. 如何在“导出方法”中选择查询请求中的所有记录?

1 个答案:

答案 0 :(得分:2)

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

正如Quota-policy上提到的那样,查询最大响应大小:128 MB压缩(返回大型查询结果时无限制)

<强> 2。我们如何选择查询请求中的所有记录而不是“导出方法&#39;

如果您计划运行可能会返回较大结果的查询,则可以在job configuration中将allowLargeResults设置为true。

返回大结果的查询将花费更长的时间来执行,即使结果集很小,并且受additional limitations的限制:

  • 您必须指定目的地表。
  • 您无法指定顶级ORDER BY,TOP或LIMIT子句。这样做会否定使用allowLargeResults的好处,因为无法再并行计算查询输出。
  • 仅当与PARTITION BY子句一起使用时,窗口函数才能返回大型查询结果。

详细了解如何分页以获取结果here,还可以阅读BigQuery Analytics book(从第200页开始的页面),其中说明Jobs::getQueryResults如何协同工作使用maxResults参数和int的阻止模式。

<强>更新

查询结果大小限制 - 有时,很难知道128 MB的压缩内容 数据意味着。

在BigQuery中运行普通查询时,响应大小限制为128 MB 压缩数据。有时,很难知道128 MB的压缩 数据意味着它被压缩2倍? 10倍?结果在内压缩 它们各自的列,这意味着压缩比趋于非常大 好。例如,如果您有一个列是国家/地区的名称,那么就在那里 可能只有几个不同的价值观。当你只有几个不同的 值,这意味着没有很多独特的信息和列 通常压缩得很好。如果你返回加密的数据blob,他们会 可能不会很好地压缩,因为它们大多是随机的。 (这在第220页上面链接的书中有解释)