QueryRequest的Execute()方法是否返回整个结果(而不是对其进行分页)?

时间:2015-09-23 09:29:48

标签: c# .net google-bigquery

当我执行我的QueryRequest对象时,我得到一个大约110,000的totalRows,而响应行大约是38,000。所以我没有收到整个结果,必须进行分页。

但我发现我的QueryRequest对象没有startIndex属性。

我如何收到整个结果集?

我使用的是高级版Google Analytics。 Google会在每次请求时仍然返回10MB的数据吗?

更新:我不认为我的问题是重复的。我的问题是,当我的QueryRequest没有startIndex属性时,如何获得特定的结果页面。

JobsResource j = null;
QueryRequest qr = null
...
j.qr.Query = "SELECT examplecolumns FROM myTable";
QueryResponse response = j.Query(qr, projectId).Execute();

3 个答案:

答案 0 :(得分:1)

调用getQueryResults()方法获取其余结果。

https://cloud.google.com/bigquery/docs/reference/v2/jobs/getQueryResults

答案 1 :(得分:0)

您无法退回整个结果集,因为Google对其所有API都有一般配额限制:

一般配额限制(所有API)

以下配额限制在Management API,Core Reporting API,MCF Reporting API,Metadata API和Real Time Reporting API之间共享。

每天每个项目50,000个请求 - 可以增加 每个IP每秒10次查询(QPS)。

在开发人员控制台中,此配额称为每用户限制。默认情况下,它设置为每秒1个查询(QPS),并且可以调整为最大值10.如果将每个用户限制设置为大于10 QPS的值,则Google Analytics配额策略仍将生效并将每用户请求限制为10 QPS。

如果您的应用程序从单个IP地址(即代表您的用户)发出所有API请求,则应考虑对每个请求使用userIP或quotaUser参数,以获得每个用户的完整QPS配额。有关详细信息,请参阅查询参数摘要。

有关详细信息,请查看此链接:Configuration and Reporting API Limits and Quotas

您还可以在此处找到有关此主题的更多信息:Querying Data

以下附加限制适用于查询数据。

每个查询的最大表数:1,000 最大查询长度:256 KB

答案 2 :(得分:0)

query / getQueryResults方法用于将一些等待作业完成推送到服务器中。使用此机制时,客户端可能会看到更快的作业完成通知,并将在该响应中收到查询结果的第一页,从而无需另外一次往返获取数据。

在伪代码中使用这些apis的一般机制是:

response = query(...)
while (!response.jobComplete) {
  response = getQueryResults(response.jobReference);
}
moreData = false
do {
  // consume response.rows
  moreData = response.pageToken != null
  if (moreData) {
    response = getQueryResults(response.jobReference, response.pageToken)
  }
} while (moreData)

请注意,某些类型安全的语言将更难以对此进行编码,因为该循环中的第一个响应可能是QueryResponseGetQueryResultsResponse类型,具体取决于查询作业是否在query()调用的初始超时,或者是否在while (!response.jobComplete)轮询循环内完成。