Google cloud dataflow 有没有一种方法可以在没有sideInput的情况下向ParDo中注入和配置?
我有一个ParDo,它使用状态和计时器以及定期更新的PcollectionView作为该ParDo的侧输入;google dataflow将抛出一个异常,在这种情况下不允许使用计时器。有没有另一种方法可以在没有sideInput的情况下将配置数据提供给parDo?实际上,sideInput是一个配置数据的映射,大约每24小时从数据存储中读取一次 我目前正在尝试看看是否可以在具有状态和计时器的ParDo之前创建一个ParDo,以定期更新配置,但我不知道如何从下一个ParDo中访问该映射。有什么建议吗Google cloud dataflow 有没有一种方法可以在没有sideInput的情况下向ParDo中注入和配置?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我有一个ParDo,它使用状态和计时器以及定期更新的PcollectionView作为该ParDo的侧输入;google dataflow将抛出一个异常,在这种情况下不允许使用计时器。有没有另一种方法可以在没有sideInput的情况下将配置数据提供给parDo?实际上,sideInput是一个配置数据的映射,大约每24小时从数据存储中读取一次 我目前正在尝试看看是否可以在具有状态和计时器的ParDo之前创建一个ParDo,以定期更新配置,但我不知道如何从下一个ParDo中访问该映射。有什么建议
注意:此管道以流模式运行,带有全局窗口,并在pubsub消息到达时读取消息。数据存储用于保存决定何时将元素输出到pubsub主题所需的数据。您可以使用固定窗口定期使用数据源更新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());
PCollectionView sideInput=管道
.应用(通知)
.申请(
进入(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
.触发(
重复。永远(AfterPane.ElementCount至少(1))
)
.允许延迟(持续时间为零)
.丢弃Firedpanes()
)
.apply(/*查询数据源*/)
.apply(View.asSingleton());
您可以使用固定窗口定期使用数据源更新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());
PCollectionView sideInput=管道
.应用(通知)
.申请(
进入(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
.触发(
重复。永远(AfterPane.ElementCount至少(1))
)
.允许延迟(持续时间为零)
.丢弃Firedpanes()
)
.apply(/*查询数据源*/)
.apply(View.asSingleton());
你好,Ryan,感谢您的回复。我使用带有状态和计时器的parDo来跟踪某些键并累积它们的值。因为我使用的是一个全局窗口,如果键从未返回,那么状态将不会被清除,因此使用计时器回调。sideInput有配置数据作为何时输出数据。简而言之,我没有使用状态计时器来更新sideInput,我使用了tick方法()嗨,Ryan,谢谢你的回复。我使用带有状态和计时器的parDo来跟踪某些键并累积它们的值。因为我使用的是一个全局窗口,如果键从未返回,那么状态将不会被清除,因此使用计时器回调。sideInput有配置数据作为何时输出数据。简而言之,我没有使用状态计时器来更新sideInput,我使用的是tick方法()