Bigquery Api Java客户端间歇性地返回错误结果

时间:2015-01-27 12:03:07

标签: google-bigquery google-client

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

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

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"}

从中我可以看出工作没有完成。客户在工作完成之前返回的原因是什么?

在构建客户端时,我使用HttpRequestInitializer,在initialize方法中,我提供了超时参数。

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

尝试为超时提供高值,如240秒等。但没有运气。行为仍然是一样的。它间歇性地失败了。

1 个答案:

答案 0 :(得分: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