Google bigquery 执行BigQueryIO.write()时获取/设置BigQuery作业ID
是否可以在批处理管道运行时设置或获取BigQuery作业ID。Google bigquery 执行BigQueryIO.write()时获取/设置BigQuery作业ID,google-bigquery,google-cloud-dataflow,apache-beam,Google Bigquery,Google Cloud Dataflow,Apache Beam,是否可以在批处理管道运行时设置或获取BigQuery作业ID。 我知道使用BigQueryAPI是可能的,但如果我使用ApacheBeam的BigQueryIO,这可能吗? 在写入BigQuery后,我需要发送一个确认,确认加载已完成。目前这是不可能的。一个BigQueryIO.write()可能会在后台使用许多BigQuery作业(即BigQueryIO.write()是一个用于将数据写入BigQuery的通用API,而不是一个用于处理单个特定BigQuery加载作业的API),这一事实使问题
我知道使用BigQueryAPI是可能的,但如果我使用ApacheBeam的BigQueryIO,这可能吗?
在写入BigQuery后,我需要发送一个确认,确认加载已完成。目前这是不可能的。一个
BigQueryIO.write()
可能会在后台使用许多BigQuery作业(即BigQueryIO.write()
是一个用于将数据写入BigQuery的通用API,而不是一个用于处理单个特定BigQuery加载作业的API),这一事实使问题变得复杂,例如:
- 如果要加载的数据量大于单个加载作业的BigQuery限制,
将其分为多个加载作业BigQueryIO.write()
- 如果您使用的是目标相关的写入方法之一(例如,
),并且同时加载到多个表中,则每个表至少有一个加载作业DynamicDestinations
- 如果您使用
方法编写一个无限制的BATCH_LOADS
,它将根据上述说明定期为新到达的数据发出加载作业PCollection
- 如果您使用的是
方法(即使您正在编写一个有界STREAMING\u INSERTS
,也允许使用该方法),那么将不会有任何加载作业PCollection
您需要使用一种典型的变通方法来“在做了其他事情之后再做某件事”,例如,在主程序中使用
pipeline.run().waitUntilFinish()
等待整个管道完成,然后执行第二个操作。目前这是不可能的。一个BigQueryIO.write()
可能会在后台使用许多BigQuery作业(即BigQueryIO.write()
是一个用于将数据写入BigQuery的通用API,而不是一个用于处理单个特定BigQuery加载作业的API),这一事实使问题变得复杂,例如:
- 如果要加载的数据量大于单个加载作业的BigQuery限制,
将其分为多个加载作业BigQueryIO.write()
- 如果您使用的是目标相关的写入方法之一(例如,
),并且同时加载到多个表中,则每个表至少有一个加载作业DynamicDestinations
- 如果您使用
方法编写一个无限制的BATCH_LOADS
,它将根据上述说明定期为新到达的数据发出加载作业PCollection
- 如果您使用的是
方法(即使您正在编写一个有界STREAMING\u INSERTS
,也允许使用该方法),那么将不会有任何加载作业PCollection
您需要使用一种典型的变通方法来解决“在做了其他事情之后再做某件事”,例如,在主程序中使用
pipeline.run().waitUntilFinish()
,等待整个管道完成,然后执行第二个操作。非常酷的答案!只是想知道你是否能告诉我们在代码中碎片的书写发生在哪里。是apitools
库已经处理了这个问题,还是BigQuerySink
类?我试图在代码中找到它发生的位置,但还没找到:)@jkff好的。但是,您建议的解决方法是否适用于模板,因为根据我的理解,在pipeline.run()之后编写的任何语句。waitUntilFinish()都不会是我模板的一部分。我说得对吗?你说得对。不幸的是,目前没有很好的模板解决方案。非常酷的答案!只是想知道你是否能告诉我们在代码中碎片的书写发生在哪里。是apitools
库已经处理了这个问题,还是BigQuerySink
类?我试图在代码中找到它发生的位置,但还没找到:)@jkff好的。但是,您建议的解决方法是否适用于模板,因为根据我的理解,在pipeline.run()之后编写的任何语句。waitUntilFinish()都不会是我模板的一部分。我说得对吗?你说得对。不幸的是,目前没有很好的模板解决方案。