有时,当我们轮询BigQuery作业时,我们的请求最终会以SocketTimeoutException
结束。您可以在下面看到引发异常的代码。
this.bigquery.jobs().get(projectNumber, jobId).execute();
以下是我们收到的错误消息。
...
Caused by: java.net.SocketTimeoutException:
Timeout while fetching URL: https://www.googleapis.com/bigquery/v2/projects/######/jobs/######
...
我的问题是,是否有办法延长超时。有谁知道默认超时是什么?
答案 0 :(得分:7)
您可以将凭据对象包装在禁用(或扩展)超时的HTTP初始化程序中。也就是说,你现在有这个:
Credential credential = ...
Bigquery bigquery = new Bigquery(HTTP_TRANSPORT, JSON_FACTORY, credential);
你可以做到
final Credential credential = ...
HttpRequestInitializer initializer = new HttpRequestInitializer() {
public void initialize(HttpRequest request) {
credential.initialize(request);
request.connectTimeout = request.readTimeout = 0;
}
}
Bigquery bigquery = new Bigquery(HTTP_TRANSPORT, JSON_FACTORY, initializer);
有关BigQuery对象javadoc的信息,请参阅this,有关BigQuery对象创建示例,请参阅this,有关HttpRequestInitializer重载,请参阅this。
答案 1 :(得分:1)
如果只是请求,您只想在请求正文中设置超时:
query_config = {
'timeoutMs': 1000,
将timeoutsMs设置为你喜欢的任何理由;)
希望有助于文档 here
修改
要获得查询结果,即使它没有遵守从站点获取的超时调用jobs.getQueryResults
,您也必须指定一个起始行,这也需要一个与行为相同的超时。 jobs.query超时允许等待作业尚未完成。