等待JDBC write()操作完成以在数据流模板中运行另一个PTransform

时间:2018-12-06 12:11:00

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

我有一个不使用模板时可以很好运行的数据流作业(批处理),但是我绝对需要使用模板来基于Cloud Storage中的事件自动执行,因此我使用Cloud Functions。

问题是我的管道有一个使用JdbcIO将数据写入表的任务。写完之后,我需要做一些后期处理工作,例如删除一些登台表。我以为可以使用Wait.on()方法,但是在JDBCIO write()方法返回PDone的同时,它会等待PCollection信号。

我想我可以运行两个管道,但是那太过分了,因为 (i)后处理阶段很简单 (ii)我需要管道协调器

在性能和成本上没有任何过大杀伤力的情况下,最佳解决方案是什么?

我唯一想到的解决方案是在ParDo方法中写入数据以返回PCollection,但是我认为JDBC write()方法是在JDBC接收器中写入的正确方法。如果有人遇到了这个问题并提出了解决方案,请与我分享。

我也看到很多人也有这个问题(大多数人使用BigQueryIO)。我认为这是真正需要的功能。 Apache Beam还不支持此功能吗?

1 个答案:

答案 0 :(得分:0)

ParDos中执行写操作并发出写结果是reasonable thing to do

特定IO未能实现与您所描述的行为类似的原因主要是因为它在历史上一直是这样,在某些情况下,我认为这可能不是很简单。

似乎没有一个很深的理由不这样做,正如您所说的,很多人都希望这样做。我认为FileIO已经有一些类似的工作正在进行。

JdbcIO返回代表写入结果的对象PCollection绝对有意义,但是我不知道有任何正在进行的具体工作。

如果最终实现了类似的方法,请考虑使用contributing it to Beam