在执行BigQueryIO.write()时获取/设置BigQuery作业ID

时间:2017-10-17 07:15:39

标签: google-bigquery google-cloud-dataflow apache-beam

是否可以设置BigQuery JobID或在批处理管道运行时获取它 我知道使用BigQuery API是可能的,但如果我使用Apache Beam的BigQueryIO,它是否可能? 我需要在写入BigQuery后发送确认信息表明加载已完成。

1 个答案:

答案 0 :(得分:5)

目前这是不可能的。事实上,单个BigQueryIO.write()可能会使用许多BigQuery作业(即BigQueryIO.write()是用于将数据写入BigQuery的通用API,而不是用于处理单个的API特定的BigQuery加载工作),例如:

  • 如果要加载的数据量大于单个加载作业的BigQuery限制,BigQueryIO.write()会将其分成多个加载作业。
  • 如果您正在使用一种与目标相关的写入方法(例如DynamicDestinations),并且同时加载到多个表中,则每个表至少会有一个加载作业。
  • 如果您使用PCollection方法编写无界BATCH_LOADS,它会定期为新到达的数据发出加载作业,但需遵守上述说明。
  • 如果您使用STREAMING_INSERTS方法(即使您正在编写有界PCollection,也允许使用它),根本不会有任何加载作业。

您需要使用一种典型的解决方法,即“在完成其他操作后执行某些操作”,例如,等到整个管道在主程序中使用pipeline.run().waitUntilFinish()完成后再进行第二次操作。