在没有GroupBy的数据上使用FixedWindows

时间:2017-01-10 06:57:23

标签: google-cloud-dataflow

我有一个流式传输管道,它使用标记有时间戳的事件。我想做的就是将它们分批到每个1分钟的FixedWindows,然后将窗口中的所有事件写入单个GCS文件。我可以使用FixedWindows,但从文档中我可以看到我需要GroupByCombine操作来应用窗口,但对于我的用例,Windowing已经完成了所有操作我需要的分组。我看到两种可能的解决方案,我不确定这两种解决方案

  • 将这些项目推送到单个GlobalWindow并重复应用1分钟的触发器,丢弃已触发的窗格。我还没有尝试过,我不确定这是否可以在没有groupBy
  • 的情况下运行
  • Combine之后运行全局FixedWindow操作 - 我不确定这是否仍会考虑Windows。

    这些都是正确的选择,还是有更好的方法可以做?

由于

1 个答案:

答案 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)))之类的触发器将无法执行您想要的操作 - 它表示近似超时。在每个键的基础上,在第一个元素到达后​​的一分钟的本地时间之后的某个合理时刻,将发出任何缓冲的内容。它不会对应于一分钟的活动时间,或任何特定的活动时间或到达时间窗口。