2017-05-26 273 views
0

我在Google Cloud DataFlow上運行Beam作業,該作業從BigQuery中讀取數據。當我運行這項工作時,需要幾分鐘的時間才能開始從(小)表中讀取數據。事實證明,BigQuery作業的數據流作業發送在BATCH模式下運行,而不是在交互模式下運行。我該如何切換到在Apache Beam中立即運行?我無法在API中找到更改優先級的方法。更改Google Cloud Dataflow BigQuery Priority

回答

1

也許一個Google員工會糾正我,但是不能,您不能將此從BATCH更改爲INTERACTIVE,因爲它沒有被Beam的API公開。

org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO.javahere):

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模式下運行你的問題,然後一個解決辦法可能是:

  1. 直接使用的BigQuery API ,滾動您自己的初始請求,並將優先級設置爲INTERACTIVE
  2. 寫步驟1的結果到一個臨時表
  3. 在你的梁管道,讀取使用臨時表BigQueryIO.Read.from()
+0

呀不幸的是,因爲我需要我的ETL作業在啓動一個解決辦法是行不通的日程安排的時間不會在未來的某個時間點。謝謝你的想法。 – Jimmy

+0

我不關注。爲什麼這不適合你? –

+0

我原以爲通過將BigQueryIO移動到第2步,我們仍然需要等待該作業開始。 – Jimmy

相關問題