Google cloud dataflow 在没有GroupBy的数据上使用FixedWindows
我有一个流式管道,它使用带有时间戳的事件。我所要做的就是将它们批处理到每个1分钟的固定窗口中,然后将窗口中的所有事件写入单个GCS文件。我可以使用Google cloud dataflow 在没有GroupBy的数据上使用FixedWindows,google-cloud-dataflow,Google Cloud Dataflow,我有一个流式管道,它使用带有时间戳的事件。我所要做的就是将它们批处理到每个1分钟的固定窗口中,然后将窗口中的所有事件写入单个GCS文件。我可以使用FixedWindows,除了从文档中可以看到,我需要GroupBy或Combine操作来应用窗口,但是对于我的用例,窗口已经完成了我需要的所有分组。我看到了两种可能的解决方案,但我不确定这两种方案是否理想 将这些项目推入一个GlobalWindow,并重复应用1分钟触发器,丢弃已触发的窗格。我还没有尝试过这个,我不确定如果没有groupBy,它是否
FixedWindows
,除了从文档中可以看到,我需要GroupBy
或Combine
操作来应用窗口,但是对于我的用例,窗口已经完成了我需要的所有分组。我看到了两种可能的解决方案,但我不确定这两种方案是否理想
- 将这些项目推入一个
,并重复应用1分钟触发器,丢弃已触发的窗格。我还没有尝试过这个,我不确定如果没有groupBy,它是否会起作用GlobalWindow
- 在
之后运行全局FixedWindow
操作-我不确定这是否仍然会考虑窗口 这些是正确的选择还是有更好的办法合并
谢谢首先,我想谈谈你的目标:听起来你想在一个特定的窗口中对所有的值进行分组。为此,您需要一个
GroupByKey
或Combine
(用于分组或聚合,实际上与窗口无关)
全局组合
将考虑该窗口。考虑数据流转换的最佳方式是,它们主要在一个窗口内操作
我还想评论一下你文章的其他方面:
- 实际上,对于非合并窗口,如
,该窗口将立即应用于FixedWindows
transformwindow.into(FixedWindow.of(Duration.standardMinutes(1))
- 诸如
之类的触发器不会执行您想要的操作-它表示一个大致的超时。在每个键的基础上,在第一个元素到达后的本地时间一分钟后的某个合理时刻,将发出缓冲的内容。它不对应于一分钟的事件时间,或任何特定事件时间或到达时间窗口AfterProcessingTime.pastFirstElementInPane(Duration.standardMinutes(1))