Flink | 想要对数据加窗口,通过什么调用方法实现?
我们如果想要对数据加窗口可以调用以下两种方法

window方法
仅针对keyby后的流可以使用
对分流后的每个子流加窗口


如图,可见有8个快捷方法可以使用
底层是帮组我们调用的window和windowAll方法
具体根据需要使用即可
windowAll方法
使用了keyby分流后的流或者未使用keyby分流后的流,均可使用
作用是:对数据进行加窗口操作,并且会忽略是否进行了keyby分流
区别在于:
使用keyby分流后的流如果调用windowAll, 相当于未分流的效果, Flink会忽略分流后的各个子流,而是将全量数据一起进行窗口计算
而未使用keyby分流后的数据,只能调用windowAll方法,无法调用window方法

这两个方法均需要传入一个WindowAssigner对象的实例
WindowAssigner对象就是指窗口的类型具体是什么?是时间窗口还是计数窗口还是会话窗口

如图,WindowAssigner是一个抽象类,我们不能直接实例化它,一般使用它的子类

如图,这些是WindowAssigner的一些子类
我们一般常用的有:
TumblingEventTimeWindows 滚动时间窗口, 以event时间为时间依据
实例化方式:TumblingEventTimeWindows.of(滚动窗口时间)
TumblingProcessingTimeWindows 滚动时间窗口, 以processing时间为依据
实例化方式:TumblingProcessingTimeWindows.of()
SlidingEventTimeWindows 滑动时间窗口, 以event时间为依据
实例化方式:SlidingEventTimeWindows of(窗口长度, 滑动距离)
SlidingProcessingTimeWindows 滑动时间窗口, 以processing时间为依据
实例化方式:SlidingProcessingTimeWindows.of(窗口长度, 滑动距离)
GlobalWindows 全局窗口, 滚动计数, 滑动计数均使用这个窗口来实现
实例化方式:GlobalWindows.create()
EventTimeSessionWindows 会话时间窗口, 以event时间为依据
实例化方式:EventTimeSessionWindows.withGap(会话gap时间)
ProcessingTimeSessionWindows 会话时间窗口, 以processing时间为依据
实例化方式:ProcessingTimeSessionWindows.withGap(会话gap时间)
