Google cloud dataflow 如何在apache beam中使用1h缓冲区等待,然后推送日期?

Google cloud dataflow 如何在apache beam中使用1h缓冲区等待,然后推送日期?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我正在收集有关航班的信息。最大飞行时间为10小时。我大约每1分钟就收到一次跟踪信息。事件顺序在apache beam中的处理过程中受到干扰。合并所有数据后,我想将其推送到BigQuery并丢弃数据,这样它就不会占用内存 我有两种策略可以做到这一点: 1) 等待1小时,如果没有新数据,则将其推送到BQ 2) 每15分钟运行一次我自己的算法,验证数据是否完整 我想用1)因为它更简单。我的代码是否正确 models=(xmls | beam.FlatMap(process_xmls)) 跟踪信息=模型

我正在收集有关航班的信息。最大飞行时间为10小时。我大约每1分钟就收到一次跟踪信息。事件顺序在apache beam中的处理过程中受到干扰。合并所有数据后,我想将其推送到BigQuery并丢弃数据,这样它就不会占用内存

我有两种策略可以做到这一点:

1) 等待1小时,如果没有新数据,则将其推送到BQ

2) 每15分钟运行一次我自己的算法,验证数据是否完整

我想用1)因为它更简单。我的代码是否正确

models=(xmls | beam.FlatMap(process_xmls))
跟踪信息=模型| beam.ParDo(FilterTI())
分组|tis=跟踪|信息| beam.WindowInto(window.FixedWindows(10*3600),trigger=后处理时间(1*3600),累加|mode=累加mode.DISCARDING)| beam.GroupByKey()|“推送并合并到BQ”

在阅读了您的用例和所需的方法(将属于同一航班的所有事件分组在一起,直到您找到一个不活动的间隙)之后,这似乎是一个完美的解决方案。在本例中,您应该使用航班标识符(
f1
f2
等作为键)并指定1小时的间隔。如果在此期间未观察到新事件,则会话将终止


您可以将它们与
beam.WindowInto(window.Sessions(session_gap))
一起使用,您可以找到一个完整的示例(不要忘记按键添加分组步骤,以便在单个会话中实际合并事件)。

我以前读过关于会话窗口的文章。。。但读完你的帖子后,我会试试看!