有时当我们轮询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/######
...
我的问题是是否有办法延长超时。有人知道默认超时是多少吗?
您可以将凭据对象包装在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,查看BigQuery对象创建示例,查看HttpRequestInitializer重载示例
如果是请求只希望在请求正文中设置超时时间:
query_config = {
'timeoutMs': 1000,
设置timeoutsMs为任意值
希望有帮助,文档在这里
编辑
要获得查询的结果,即使它没有遵守从站点获取的超时呼叫jobs.getQueryResults
,您必须指定一个开始行,这也需要一个超时,其行为与作业相同。