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