如何使用BigQuery客户端库版本0.26.0-beta执行异步查询?

时间:2017-10-17 20:15:57

标签: google-bigquery

我的查询执行现在似乎是同步执行而不是异步使用通过“com.google.cloud:google-cloud-bigquery:0.26”提供的最新版本(截至2017年10月17日)BigQuery库版本。 0-β”。

我需要使用最新版本,以便我可以正确设置maxBillingTier选项。

这是我的代码段:

QueryJobConfiguration request =
    QueryJobConfiguration.newBuilder(query)
        .setDefaultDataset(datasetId)
        .setMaximumBillingTier(MAX_BILLING_TIER)
        .build();

BigQuery.QueryOption pageSizeOption = BigQuery.QueryOption.of(
    BigQuery.QueryResultsOption.pageSize(PAGE_SIZE));
BigQuery.QueryOption maxWaitOption = BigQuery.QueryOption.of(
    BigQuery.QueryResultsOption.maxWaitTime(MAX_WAIT_MILLIS));

QueryResponse response = null;
try {
      response = bigQuery.query(request,
                                pageSizeOption,
                                maxWaitOption);
} catch ( // exception-handling code deleted for brevity ) {
  ...
}
return response.getJobId();

使用版本0.24.0而不是QueryJobConfiguration的QueryRequest的类似格式的请求将(快速)返回jobId,然后我可以使用它来轮询状态。现在,我突然没有简单的方法将查询状态报告给我的调用代码。

更新: 我能够通过这种方法获得异步查询结果:

QueryJobConfiguration request =
    QueryJobConfiguration.newBuilder(query)
        .setDefaultDataset(datasetId)
        .setMaximumBillingTier(MAX_BILLING_TIER)
        .build();

JobInfo jobInfo = JobInfo
    .newBuilder(request)
    .setJobId(jobId)
    .build();

Job job = bigQuery.create(jobInfo);

QueryResponse response = job.getQueryResults(pageSizeOption,
                                             maxWaitOption);
return response.getJobId();

当然,我需要添加异常处理,但这就是要点。但是,它比0.24.0-beta版本中提供的更简单的格式更不优雅。

有更优雅的解决方案吗?

将优先级设置为BATCH优先级会对此产生影响吗?

0 个答案:

没有答案