首页 文章

更改Google Cloud Dataflow BigQuery优先级

提问于
浏览
0

我在Google Cloud DataFlow上运行了一个Beam作业,该作业从BigQuery读取数据 . 当我运行这项工作时,工作需要几分钟才能开始从(小)表中读取数据 . 事实证明,BigQuery作业的数据流作业发送在BATCH模式下运行,而不是在交互模式下运行 . 如何将其切换为在Apache Beam中立即运行?我无法在API中找到更改优先级的方法 .

1 回答

  • 1

    也许一个Google员工会纠正我,但不,你不能将其从 BATCH 改为 INTERACTIVE ,因为它是's not exposed by 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 模式下运行真的是一个问题,那么一个解决方法可能是:

    • 直接使用BigQuery API,滚动您自己的初始请求,并将优先级设置为 INTERACTIVE .

    • 将步骤1的结果写入临时表

    • 在Beam管道中,使用 BigQueryIO.Read.from() 读取临时表

相关问题