我有一个流式传输管道,它使用标记有时间戳的事件。我想做的就是将它们分批到每个1分钟的FixedWindows,然后将窗口中的所有事件写入单个GCS文件。我可以使用FixedWindows
,但从文档中我可以看到我需要GroupBy
或Combine
操作来应用窗口,但对于我的用例,Windowing已经完成了所有操作我需要的分组。我看到两种可能的解决方案,我不确定这两种解决方案
GlobalWindow
并重复应用1分钟的触发器,丢弃已触发的窗格。我还没有尝试过,我不确定这是否可以在没有groupBy 在Combine
之后运行全局FixedWindow
操作 - 我不确定这是否仍会考虑Windows。
这些都是正确的选择,还是有更好的方法可以做?
由于
答案 0 :(得分:1)
首先,我想解决您的目标:听起来您想要在特定窗口中对所有值进行分组。为此,您需要SELECT group_concat(column_name)
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name='Table_name';
或GroupByKey
(进行分组或聚合,而不是与窗口有任何关系)。
全局Combine
会考虑该窗口。考虑Dataflow转换的最佳方式是它们都主要在窗口内运行。
我还想评论你帖子的其他方面:
Combine
之类的非合并窗口,该窗口将立即应用于FixedWindows
转换。Window.into(FixedWindow.of(Duration.standardMinutes(1)))
之类的触发器将无法执行您想要的操作 - 它表示近似超时。在每个键的基础上,在第一个元素到达后的一分钟的本地时间之后的某个合理时刻,将发出任何缓冲的内容。它不会对应于一分钟的活动时间,或任何特定的活动时间或到达时间窗口。