flink(10) flink sql 窗口函数 及其他常见函数

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 orderBy 'rowtime preceding UNBOUNDED_RANGE as 

你可能感兴趣的:(flink)