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

ris*_*097 0 google-bigquery google-cloud-dataflow apache-beam

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

jkf*_*kff 5

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

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

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