也许一个Google员工会纠正我,但是不能,您不能将此从BATCH
更改为INTERACTIVE
,因为它没有被Beam的API公开。
从org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO.java
(here):
private void executeQuery(
String executingProject,
String jobId,
TableReference destinationTable,
JobService jobService) throws IOException, InterruptedException {
JobReference jobRef = new JobReference()
.setProjectId(executingProject)
.setJobId(jobId);
JobConfigurationQuery queryConfig = createBasicQueryConfig()
.setAllowLargeResults(true)
.setCreateDisposition("CREATE_IF_NEEDED")
.setDestinationTable(destinationTable)
.setPriority("BATCH") <-- NOT EXPOSED
.setWriteDisposition("WRITE_EMPTY");
jobService.startQueryJob(jobRef, queryConfig);
Job job = jobService.pollJob(jobRef, JOB_POLL_MAX_RETRIES);
if (parseStatus(job) != Status.SUCCEEDED) {
throw new IOException(String.format(
"Query job %s failed, status: %s.", jobId, statusToPrettyString(job.getStatus())));
}
}
如果这是真的,查询在BATCH
模式下运行你的问题,然后一个解决办法可能是:
- 直接使用的BigQuery API ,滚动您自己的初始请求,并将优先级设置为
INTERACTIVE
。
- 写步骤1的结果到一个临时表
- 在你的梁管道,读取使用临时表
BigQueryIO.Read.from()
呀不幸的是,因为我需要我的ETL作业在启动一个解决办法是行不通的日程安排的时间不会在未来的某个时间点。谢谢你的想法。 – Jimmy
我不关注。为什么这不适合你? –
我原以为通过将BigQueryIO移动到第2步,我们仍然需要等待该作业开始。 – Jimmy