当输入元素在 DoFn 的侧面输出中具有标志值时,有没有办法关闭窗口?例如,指示会话关闭的事件会关闭窗口。
我一直在阅读文档,触发器主要是基于时间的。一个例子会很棒。
编辑: Trigger.OnElementContext.forTrigger(ExecutableTrigger trigger) 似乎很有希望,但 ExecutableTrigger 文档目前还很薄。
当输入元素在 DoFn 的侧面输出中具有标志值时,有没有办法关闭窗口?例如,指示会话关闭的事件会关闭窗口。
我一直在阅读文档,触发器主要是基于时间的。一个例子会很棒。
编辑: Trigger.OnElementContext.forTrigger(ExecutableTrigger trigger) 似乎很有希望,但 ExecutableTrigger 文档目前还很薄。
我不认为这是可用的。现在只有一个数据驱动触发器 elementCountAtLeast。
https://cloud.google.com/dataflow/model/triggers#data-driven-triggers
解决此问题的方法是复制会话窗口函数代码并编写自定义窗口函数。
简而言之,您一直将元素分配到同一个窗口中,直到您看到终止元素。然后开始创建一个新窗口。
不幸的是,目前还没有办法触发元素的内容。来自Apache Beam 文档:
Beam 提供了一个数据驱动的触发器,
AfterPane.elementCountAtLeast()
. 此触发器适用于元素计数;它在当前窗格收集了至少 N 个元素后触发。
目前有一个更强大的数据驱动触发器的开放票。然而(同样,目前),Beam 团队似乎正在为数据驱动触发器一次填写一个用例(即元素计数或时间戳),而不是为触发任意值添加广泛的支持在一个元素内。
ExecutableTrigger 包装了一个 Trigger 对象以供执行。请参阅ExecutableTrigger文档。