Google cloud dataflow 在BigQueryIO.write()操作之后执行进程

Google cloud dataflow 在BigQueryIO.write()操作之后执行进程,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我有一个以BigQuery表作为接收器的管道。我需要在将数据写入BigQuery之后执行一些步骤。这些步骤包括对该表执行查询、从中读取数据以及写入其他表 如何实现上述目标?我是否应该为后者创建一个不同的管道,但在第一个管道之后调用它将是另一个问题 如果上面的工作都没有,那么是否可以从正在运行的管道调用另一个数据流作业(模板) 我真的需要一些帮助 谢谢。BigQueryIO目前不明确支持这一点。唯一的解决方法是使用单独的管道:启动第一个管道,等待它完成(例如使用pipeline.run().wai

我有一个以BigQuery表作为接收器的管道。我需要在将数据写入BigQuery之后执行一些步骤。这些步骤包括对该表执行查询、从中读取数据以及写入其他表

如何实现上述目标?我是否应该为后者创建一个不同的管道,但在第一个管道之后调用它将是另一个问题

如果上面的工作都没有,那么是否可以从正在运行的管道调用另一个数据流作业(模板)

我真的需要一些帮助


谢谢。

BigQueryIO目前不明确支持这一点。唯一的解决方法是使用单独的管道:启动第一个管道,等待它完成(例如使用
pipeline.run().waitUntilFinish()
),启动第二个管道(确保为其使用单独的管道对象-不支持多次重用同一对象).

我一直在使用模板的一个变通方法是将IO操作的结果写入一个特定的bucket中,触发一个云函数(即我的orchestrator),然后触发以下管道。但是,我只使用TextIO操作对其进行了测试。 因此,在你的情况下:

  • 执行BigQueryIO.write()操作
  • 将其结果写入一个文件(xxx元文件)到一个云存储桶(xxx元桶)中,您只保留数据流结果-这是管道的最后一步
  • 编写一个orchestrator云函数,用于侦听xxx元桶中创建/修改的对象(请参阅)
  • 在orchestrator中,您可能需要一些条件来检查实际创建/修改的文件
  • 相应地触发下一个管道(直接在orchestrator中,或通过触发另一个负责启动该特定管道的云函数将其解耦)

非常肯定,使用PubSub可以轻松复制类似的方法,而不必写入bucket(例如,请参阅我列表中的第二步)

只需添加—您不必使用其他管道来实现这一点。在第一个管道完成(
pipeline.run().waitUntilFinish()
)之后,您可以重新使用BigQuerySDK。我们在管道中经常这样做,并且模式运行良好@jkff如何在我创建模板的情况下使其工作?那么,我会为这两个管道提供单独的模板吗?如果我想创建一个同时运行两个管道的模板,该怎么办?不幸的是,这在模板中是不可能的。