我的查询执行现在似乎是同步执行而不是异步使用通过“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优先级会对此产生影响吗?