QueryRequest 的 Execute() 方法是否 return 整个结果(而不是分页)?
Does QueryRequest's Execute() method return the entire result (and not paginate it)?
当我执行我的 QueryRequest
对象时,我得到的 totalRows
约为 110,000,而响应行约为 38,000。所以我没有收到完整的结果,必须进行分页。
但是我看到我的QueryRequest
对象没有startIndex
属性。
我怎样才能收到整个结果集?
我使用的是高级版 Google Analytics。每个请求 Google 仍然 return 10MB 数据吗?
更新:我不认为我的问题是重复的。我的意思是当我的 QueryRequest
没有 startIndex
属性.
时如何获得特定页面的结果
JobsResource j = null;
QueryRequest qr = null
...
j.qr.Query = "SELECT examplecolumns FROM myTable";
QueryResponse response = j.Query(qr, projectId).Execute();
您不能 return 整个结果集,因为 Google 对他们的所有 API 有一般配额限制:
一般配额限制(所有 APIs)
以下配额限制由管理 API、核心报告 API、MCF 报告 API、元数据 API 和实时报告 [=32] 共享=].
每天每个项目 50,000 个请求 – 可以增加
每个 IP 每秒 10 个查询 (QPS)。
在 Developers Console 中,此配额称为每用户限制。默认情况下,它设置为每秒 1 个查询 (QPS),并且可以调整为最大值 10。如果每个用户限制设置为大于 10 QPS 的值,Google Analytics 配额策略仍将生效并将每个用户的请求限制为 10 QPS。
如果您的应用程序从单个 IP 地址发出所有 API 请求(即代表您的用户),您应该考虑在每个请求中使用 userIP 或 quotaUser 参数以获得每个用户的完整 QPS 配额。有关详细信息,请参阅查询参数摘要。
有关更多信息,请查看此 link:Configuration and Reporting API Limits and Quotas
您还可以在此处找到有关该主题的更多信息:Querying Data
以下附加限制适用于查询数据。
每个查询的最大表数:1,000
最大查询长度:256 KB
调用 getQueryResults() 方法获取其余结果。
https://cloud.google.com/bigquery/docs/reference/v2/jobs/getQueryResults
query / getQueryResults 方法用于将一些等待完成的作业推送到服务器中。使用此机制时,客户端可能会更快地收到作业完成通知,并将在该响应中收到查询结果的第一页,从而避免需要额外的往返行程来获取数据。
在伪代码中使用这些 api 的一般机制是:
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)
请注意,某些类型安全的语言将更难对此进行编码,因为该 do 循环中的第一个响应可能是 QueryResponse
或 GetQueryResultsResponse
类型,具体取决于查询作业是否在 query()
调用的初始超时内完成,或者它是否在 while (!response.jobComplete)
轮询循环内完成。
当我执行我的 QueryRequest
对象时,我得到的 totalRows
约为 110,000,而响应行约为 38,000。所以我没有收到完整的结果,必须进行分页。
但是我看到我的QueryRequest
对象没有startIndex
属性。
我怎样才能收到整个结果集?
我使用的是高级版 Google Analytics。每个请求 Google 仍然 return 10MB 数据吗?
更新:我不认为我的问题是重复的。我的意思是当我的 QueryRequest
没有 startIndex
属性.
JobsResource j = null;
QueryRequest qr = null
...
j.qr.Query = "SELECT examplecolumns FROM myTable";
QueryResponse response = j.Query(qr, projectId).Execute();
您不能 return 整个结果集,因为 Google 对他们的所有 API 有一般配额限制:
一般配额限制(所有 APIs)
以下配额限制由管理 API、核心报告 API、MCF 报告 API、元数据 API 和实时报告 [=32] 共享=].
每天每个项目 50,000 个请求 – 可以增加 每个 IP 每秒 10 个查询 (QPS)。
在 Developers Console 中,此配额称为每用户限制。默认情况下,它设置为每秒 1 个查询 (QPS),并且可以调整为最大值 10。如果每个用户限制设置为大于 10 QPS 的值,Google Analytics 配额策略仍将生效并将每个用户的请求限制为 10 QPS。
如果您的应用程序从单个 IP 地址发出所有 API 请求(即代表您的用户),您应该考虑在每个请求中使用 userIP 或 quotaUser 参数以获得每个用户的完整 QPS 配额。有关详细信息,请参阅查询参数摘要。
有关更多信息,请查看此 link:Configuration and Reporting API Limits and Quotas
您还可以在此处找到有关该主题的更多信息:Querying Data
以下附加限制适用于查询数据。
每个查询的最大表数:1,000 最大查询长度:256 KB
调用 getQueryResults() 方法获取其余结果。
https://cloud.google.com/bigquery/docs/reference/v2/jobs/getQueryResults
query / getQueryResults 方法用于将一些等待完成的作业推送到服务器中。使用此机制时,客户端可能会更快地收到作业完成通知,并将在该响应中收到查询结果的第一页,从而避免需要额外的往返行程来获取数据。
在伪代码中使用这些 api 的一般机制是:
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)
请注意,某些类型安全的语言将更难对此进行编码,因为该 do 循环中的第一个响应可能是 QueryResponse
或 GetQueryResultsResponse
类型,具体取决于查询作业是否在 query()
调用的初始超时内完成,或者它是否在 while (!response.jobComplete)
轮询循环内完成。