Table API 窗口
时间语义,要配合窗口操作才能发挥作用
在Table API和SQL中 主要有两种窗口
Group Windows(分组窗口)
根据时间或行计数间隔,将行聚合到有限的组(Group)中,并对每个组的数据执行一次聚合函数
Over Windows (开窗函数)
针对每个输入行,计算相邻行范围内的聚合
Group Windows
group Windows 是使用window(w:GroupWindow)子句定义的,并且必须有as子句 制定一个别名
为了按窗口对表进行分组,窗口的别名 必须在group by子句中,像常规的分组字段一样引用
val table = input.window([w:GroupWindow] as 'w)
.group by ('w,'a)
.select('a,'b.sum)
//滚动窗口,要用Tumble类来定义
//tumbling event-time window
.window(Tumble over 10.minutes on 'rowtime as 'w)
//tumble processing-time window
.window(Tumble over 10.minutes on 'proctime as 'w)
//滚动计数窗口 这里指定时间 是为了按照时间排序
.window(Tumble over 10.rows on 'proctime as 'w)
//滚动窗口,要用Slide类来定义
//Sliding event-time window
.window(Tumble over 10.minutes every 5.minutes on 'rowtime as 'w)
//Sliding processing-time window
.window(Tumble over 10.minutes every 5.minutes on 'proctime as 'w)
//滑动计数窗口 这里指定时间 是为了按照时间排序
.window(Tumble over 10.rows every 5.rows on 'proctime as 'w)
//会话窗口
//会话窗口用Session类来定义
//session Event-time window
.window(Session withGap 10.minutes on 'rowtime as 'w)
//Session Processing-time Window
.window(Session withGap 10.minutes on 'proctime as 'w)
Over Windows
Over window 聚合是标准SQL中已有的(over子句),可以在查询的SELECT子句中定义
Over window 聚合,会针对每个输入行,计算相邻行范围内的聚合
Over windows 使用window 子句定义,并在select 通过别名来引用
val table = input
.window([w:OverWindow] as 'w)
.select('a,'b.sum over 'w ,'c.min over 'w)
Table API 提供了over 类来配置Over窗口的属性
//无界Over Window
//可以在事件时间或处理时间,以及指定为时间间隔,或计数的范围内,定义Over windows
//无界的事件时间over window
.window(Over partitionBy 'a orde