Java中如何设置BigQuery API请求超时时间



有时当我们轮询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,您必须指定一个开始行,这也需要一个超时,其行为与作业相同。

如果任务尚未完成,则查询超时时间以允许等待。

最新更新