1

我正在使用 big-query java 客户端执行一些长时间运行的查询。

我构建了一个大查询作业并像这样执行

val queryRequest = new QueryRequest().setQuery(query)
val queryJob = client.jobs().query(ProjectId, queryRequest)
queryJob.execute()

我面临的问题是对于同一个查询,客户端在作业完成之前返回,即结果中的行数为零。

我尝试打印响应并显示

{"jobComplete":false,"jobReference":{"jobId":"job_bTLRGrw5_xR26i9Li3a9EQvuA6c","projectId":"analytics-production"},"kind":"bigquery#queryResponse"}

从那我可以看出这项工作还没有完成。为什么客户在工作完成之前返回?

在构建客户端时,我使用HttpRequestInitializerand 在初始化方法中提供超时参数。

override def initialize(request: HttpRequest): Unit = {
  request.setConnectTimeout(...)
  request.setReadTimeout(...)
}

尝试为超时设置高值,例如 240 秒等。但没有运气。行为仍然相同。它间歇性地失败。

4

1 回答 1

2

确保在 Bigquery 请求正文而不是 HTTP 对象上设置超时。

val queryRequest = new QueryRequest().setQuery(query).setTimeoutMs(10000) //10 seconds

参数是timeoutMs. 这记录在这里:https ://cloud.google.com/bigquery/docs/reference/v2/jobs/query

另请阅读有关此字段的文档:在请求超时并返回之前等待查询完成的时间(以毫秒为单位)。请注意,这只是请求的超时,而不是查询的超时。如果查询的运行时间比超时值长,则调用返回时没有任何结果,并且“jobComplete”标志设置为 false。您可以调用 GetQueryResults() 来等待查询完成并读取结果。默认值为 10000 毫秒(10 秒)。

更多关于同步查询的信息在这里
https://cloud.google.com/bigquery/querying-data#syncqueries

于 2015-01-27T12:09:59.473 回答