Google bigquery Google BigQuery无法处理较大的结果集,获取“响应太大,无法返回”或“查询执行期间超出了资源”

Google bigquery Google BigQuery无法处理较大的结果集,获取“响应太大,无法返回”或“查询执行期间超出了资源”,google-bigquery,Google Bigquery,我目前正在C应用程序中处理大表~105M记录 当使用“Order by”或“Order EATH by”子句查询表时,我在查询执行错误期间获得了超出的资源 若我删除了'orderby'或'ordereachby'子句,那个么我得到的响应太大,无法返回错误 下面是我正在使用Wikipedia公共表的两个场景的示例查询 从[publicdata:samples.wikipedia]中选择Id、标题、计数*,按Id分组,按Id排序,标题描述 从[publicdata:samples.wikipedia

我目前正在C应用程序中处理大表~105M记录

当使用“Order by”或“Order EATH by”子句查询表时,我在查询执行错误期间获得了超出的资源

若我删除了'orderby'或'ordereachby'子句,那个么我得到的响应太大,无法返回错误

下面是我正在使用Wikipedia公共表的两个场景的示例查询

从[publicdata:samples.wikipedia]中选择Id、标题、计数*,按Id分组,按Id排序,标题描述

从[publicdata:samples.wikipedia]中选择Id、标题、计数*,按Id、标题分组

以下是我的问题

大查询响应的最大大小是多少? 如何选择查询请求中不在“导出方法”中的所有记录? 一,。大查询响应的最大大小是多少

正如查询中提到的,最大响应大小:返回大型查询结果时,10GB压缩不受限制

二,。如何选择查询请求中不在“导出方法”中的所有记录

如果计划运行可能返回更大结果的查询,可以在中将allowLargeResults设置为true

即使结果集很小,返回较大结果的查询执行时间也会更长,并且会受到以下限制:

必须指定目标表。 不能指定顶级ORDER BY、top或LIMIT子句。这样做否定了使用allowLargeResults的好处,因为查询输出不能再并行计算。 窗口函数只有在与PARTITION BY子句结合使用时才能返回大型查询结果。 阅读有关如何分页以获取结果的更多信息,并阅读从第200页开始的页面,其中解释了如何与maxResults参数和int的阻塞模式一起工作

更新:

查询结果大小限制-有时,很难知道10 GB的压缩 数据意味着

在BigQuery中运行普通查询时,响应大小限制为10 GB 压缩数据的存储。有时,很难知道10GB的压缩容量是多少 数据意味着。它被压缩了2倍吗?10倍?结果压缩在 它们各自的列,这意味着压缩比往往非常低 好的例如,如果有一列是国家的名称,则有 可能只有几个不同的值。当你只有几个不同的 值,这意味着没有很多唯一的信息,列 通常会很好地压缩。如果返回加密的数据块,它们将
可能压缩不好,因为它们大部分是随机的。这在上文第220页链接的书中有解释。最大响应大小:128MB压缩。这里压缩的含义是什么?我们没有对select语句使用任何压缩逻辑。此查询从[publicdata:samples.wikipedia]中选择Id、标题、计数*按Id分组,标题返回19376810条使用计数方法计算的19M条记录。它返回的响应太大,无法在Web UI和.NET客户端API中返回错误。您提到过尝试设置allowLargeResults属性,这个属性只有在指定目标表时才能设置,这意味着基本上将查询结果复制到另一个BigQuery表中。我可以完成上面的步骤,然后新的BigQuery表有19376810 19M条记录,那么我们如何使用API cal?@selvakumar从新表中选择这些大记录,如您分页的链接文章中所述。例如:您在每次调用中读取1000条记录,因此您需要执行19k次调用来获取所有数据。无论如何,这是一个糟糕的用例。现在我在QueryRequest中设置了MaxResults=1000条记录,并通过QueryResponse response=j.QueryqueryRequest,projectID.Execute;,执行查询,当它开始从DataSet.TableID查询Select*时,它再次抛出太大的响应,无法返回错误。如果我应用限制100000,那么查询将运行,并且能够通过100次调用获得结果。为什么Google bigquery对大结果抛出错误而不是返回1000条记录?您需要在作业配置级别设置allowLargeResults,并且需要设置目标表。这就是你错过的。