为什么 QueryResponse 没有 nextPageToken 属性
Why QueryResponse has no nextPageToken attribute
当我执行我的 QueryRequest
对象时,我得到的 totalRows
约为 110,000,而响应行约为 38,000。所以我想我只收到了第一页。
QueryResponse response = j.Query(qr, project).Execute();
在上面的代码中,j
是一个 JobsResource
,qr
是一个 QueryRequest
对象。
QueryResponse
有一个 pageToken
属性 是返回页面的标记。但是我怎样才能检索查询中的其他页面呢?我没有找到任何 nextPageToken
属性.
当我执行 JobsResource
对象的 List()
方法时,它有一个 nextPageToken
属性 但在上面的 Query()
方法中没有。
JobList jobList = j.List(Globals.ProjectId).Execute();
更新:
我正在阅读 Google BigQuery's related page for query 的文档。当我查看 JobRefrence
的描述时,它说:
Reference to the Job that was created to run the query. This field
will be present even if the original request timed out, in which case
GetQueryResults can be used to read the results once the query has
completed. Since this API only returns the first page of results,
subsequent pages can be fetched via the same mechanism
(GetQueryResults).
因此,一旦我收到上面的回复,我就会 运行 GetQueryResults() 我的工作。
GetQueryResultsResponse r = j.GetQueryResults(projectId, response.JobReference.JobId).Execute();
但这给我的结果与我的回复相同。我怎样才能得到下一页? Google和"Same Mechanism"是什么意思?
在 QueryResponse
中,您可以访问 JobsReference
,您可以在其中找到 JobId
和 ProjectId
(尽管您已经有了)。
您可以使用它们在您的 JobsResrouce
上调用 GetQueryResults
以生成下一页的新请求:
j.GetQueryResults(response.JobsReference.ProjectId,
response.JobsReference.JobId).Execute();
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
或 GetQueryResults
类型,具体取决于查询作业是否在 query(
) 调用的初始超时内完成,或者它是否在 while (!response.jobComplete)
轮询循环内完成。
当我执行我的 QueryRequest
对象时,我得到的 totalRows
约为 110,000,而响应行约为 38,000。所以我想我只收到了第一页。
QueryResponse response = j.Query(qr, project).Execute();
在上面的代码中,j
是一个 JobsResource
,qr
是一个 QueryRequest
对象。
QueryResponse
有一个 pageToken
属性 是返回页面的标记。但是我怎样才能检索查询中的其他页面呢?我没有找到任何 nextPageToken
属性.
当我执行 JobsResource
对象的 List()
方法时,它有一个 nextPageToken
属性 但在上面的 Query()
方法中没有。
JobList jobList = j.List(Globals.ProjectId).Execute();
更新:
我正在阅读 Google BigQuery's related page for query 的文档。当我查看 JobRefrence
的描述时,它说:
Reference to the Job that was created to run the query. This field will be present even if the original request timed out, in which case GetQueryResults can be used to read the results once the query has completed. Since this API only returns the first page of results, subsequent pages can be fetched via the same mechanism (GetQueryResults).
因此,一旦我收到上面的回复,我就会 运行 GetQueryResults() 我的工作。
GetQueryResultsResponse r = j.GetQueryResults(projectId, response.JobReference.JobId).Execute();
但这给我的结果与我的回复相同。我怎样才能得到下一页? Google和"Same Mechanism"是什么意思?
在 QueryResponse
中,您可以访问 JobsReference
,您可以在其中找到 JobId
和 ProjectId
(尽管您已经有了)。
您可以使用它们在您的 JobsResrouce
上调用 GetQueryResults
以生成下一页的新请求:
j.GetQueryResults(response.JobsReference.ProjectId,
response.JobsReference.JobId).Execute();
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
或 GetQueryResults
类型,具体取决于查询作业是否在 query(
) 调用的初始超时内完成,或者它是否在 while (!response.jobComplete)
轮询循环内完成。