窗口函数

Window

聚合事件(如:sum,count,etc)在流上的工作方式与批处理中的不同。例如,我们不能够去统计流中的所有元素,因为流一般是无限的(无界的)。相反,流中的一些aggregate操作,是由Windows控制的,例如:计算过去五分钟或者最后100个元素的总和。
Windows可以是由事件驱动的(例如,每30秒)或者数据驱动(例如每100个元素)。这可以用来区分不同类型的Windows,例如:tumbling windows (no overlap), sliding windows (with overlap), and session windows (punctuated by a gap of inactivity).

upload successful

Watermark使用总结

  • Watermark的含义是所有时间t’< t 的事件都已经发生。假如Watermark t已经生效,那么后续Event Time小于t的记录都会被丢弃掉(目前Flink的处理是丢弃这些来的更晚的数据,后续支持用户配置让更晚的数据也能继续update)。
    可以认为watermark是最低水位线,水位线一下的数据都不要了。水位越高时间越大。如果水位线是2018-01-01 01:01:20.000,那么该时间点之前的数据都将会抛弃掉。
    Watermark的计算方式是<rowtime_field> - offset,rowtime_field可以是Event Time,Ingestion Time,Processing Time。
  • 针对乱序的的流,Watermark至关重要。即使一些事件延迟到达,也不至于过于影响Window窗口计算的正确性。
  • 并行数据流中,当Operator有多个输入流时,Operator的Event Time以最小流Event Time为准。

滚动窗口

滚动窗口(TUMBLE)将每个元素分配到一个指定大小的窗口中。通常滚动窗口有一个固定的大小,并且不会出现重叠。例如:如果指定了一个5分钟大小的滚动窗口,无限流的数据会根据时间划分成 [0:00 - 0:05)、 [0:05, 0:10)、 [0:10, 0:15)等窗口。如下图,展示了一个大小划分为30秒的滚动窗口

滑动窗口

滑动窗口(HOP),也被称作Sliding Window。不同于滚动窗口,滑动窗口的窗口可以重叠。

滑动窗口有两个参数:size和slide。size为窗口的大小,slide为每次滑动的步长。

  • slide < size,则窗口会重叠,每个元素会被分配到多个窗口。
  • slide = size,则等同于滚动窗口(TUMBLE)。
  • slide > size,则为跳跃窗口,窗口之间不重叠且有间隙。

会话窗口

会话窗口(SESSION)通过Session活动来对元素进行分组。会话窗口与滚动窗口和滑动窗口相比,没有窗口重叠,没有固定窗口大小。相反,当它在一个固定的时间周期内不再收到元素,即会话断开时,这个窗口就会关闭。

会话窗口通过一个间隔时间(Gap)来配置,这个间隔定义了非活跃周期的长度。例如,一个表示鼠标点击活动的数据流可能具有长时间的空闲时间,并在其间散布着高浓度的点击。 如果数据在最短指定的间隔持续时间之后到达,则会开始一个新的窗口。

OVER窗口

OVER窗口(OVER Window)是传统数据库的标准开窗,OVER Window不同于Group By Window,OVER Window中每1个元素都对应1个窗口。窗口元素是与当前元素相邻的元素集合,流上元素会在多个窗口中。

在应用OVER Window的流式数据中,每1个元素都对应1个OVER Window。每1个元素都触发一次数据计算。在实时计算的底层实现中,OVER Window的数据进行全局统一管理(数据只存储一份),逻辑上为每1个元素维护1个OVER Window,为每1个元素进行窗口计算,完成计算后会清除过期的数据。

类似hive窗口函数中的over
参考:
https://help.aliyun.com/document_detail/62510.html?spm=a2c4g.11186623.2.14.7e97404eJXzGMP#concept-62510-zh