也許一個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