欢迎光临散文网 会员登陆 & 注册

Flink | 想要对数据加窗口,通过什么调用方法实现?

2023-08-03 10:56 作者:ingemar-  | 我要投稿

我们如果想要对数据加窗口可以调用以下两种方法



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时间)


Flink | 想要对数据加窗口,通过什么调用方法实现?的评论 (共 条)

分享到微博请遵守国家法律