有没有一种方法可以在没有sideInput的情况下向ParDo注入和配置?

时间:2019-06-04 17:50:55

标签: google-cloud-dataflow apache-beam

我有一个ParDo,它使用状态和计时器,并定期更新PcollectionView作为该parDo的sideInput;谷歌数据流将引发异常,在这种情况下不允许使用计时器。还有另一种方法可以在没有sideInput的情况下将配置数据馈送到parDo?本质上,sideInput是大约每24小时从数据存储读取一次的配置数据映射。

我目前正在尝试查看是否可以在具有状态和计时器的ParDo之前创建ParDo,以定期更新配置,但是我看不到如何从下一个ParDo中访问该映射。有什么建议吗?

注意:该管道在具有全局窗口的流模式下运行,并在pubsub消息到达时读取它们。数据存储区用于保存决定何时将元素输出到pubsub主题所需的数据。

1 个答案:

答案 0 :(得分:0)

您可以使用固定窗口来定期使用数据源更新PCollectionView,而不是使用状态计时器来更新侧面输入:

        PCollectionView<Map<String,String>> sideInput = pipeline
                .apply(notifications)
                .apply(
                        Window.<Long>into(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
                                .triggering(
                                        Repeatedly.forever(AfterPane.elementCountAtLeast(1))
                                )
                                .withAllowedLateness(Duration.ZERO)
                                .discardingFiredPanes()
                )
                .apply( /* query data source */ )
                .apply(View.<Map<String,String>>asSingleton());