Flink-分组窗口 | Over Windows | SQL 中的 Group Windows | SQL 中的 Over Windows

本文详细介绍了Flink中的窗口操作,包括Group Windows(滚动窗口、滑动窗口、会话窗口)和Over Windows的使用,以及如何在SQL中实现这两种窗口的聚合。同时,提供了相关的时间戳辅助函数和实际操作代码示例。
摘要由CSDN通过智能技术生成

窗口(Windows)

  1. 时间语义,要配合窗口操作才能发挥作用。最主要的用途,当然就是开窗口、根据时间段做计算了。下面我们就来看看Table API和SQL中,怎么利用时间字段做窗口操作。
  2. 在Table API和SQL中,主要有两种窗口:Group Windows和Over Windows
    在这里插入图片描述

分组窗口(Group Windows)

  1. Group Windows 是使用 window(w:GroupWindow)子句定义的,并且必须由as子句指定一个别名。
  2. 为了按窗口对表进行分组,窗口的别名必须在 group by 子句中,像常规的分组字段一样引用
  3. Table API 提供了一组具有特定语义的预定义 Window 类,这些类会被转换为底层 DataStream 或 DataSet 的窗口操作
  4. 分组窗口分为三种:滚动窗口、滑动窗口、会话窗口

滚动窗口(Tumbling windows)

  1. 滚动窗口(Tumbling windows)要用Tumble类来定义
  2. over:定义窗口长度
  3. on:用来分组(按时间间隔)或者排序(按行数)的时间字段
  4. as:别名,必须出现在后面的groupBy中
// Tumbling Event-time Window(事件时间字段rowtime)
.window(Tumble over 10.minutes on 'rowtime as 'w)

// Tumbling Processing-time Window(处理时间字段proctime)
.window(Tumble over 10.minutes on 'proctime as 'w)

// Tumbling Row-count Window (类似于计数窗口,按处理时间排序,10行一组)
.window(Tumble over 10.rows on 'proctime as 'w)

滑动窗口(Sliding windows):

  1. 滑动窗口(Sliding windows)要用Slide类来定义
  2. over:定义窗口长度
  3. every:定义滑动步长
  4. on:用来分组(按时间间隔)或者排序(按行数)的时间字段
  5. as:别名,必须出现在后面的groupBy中
// Sliding Event-time Window
.window(Slide over 10.minutes every 5.minutes on 'rowtime as 'w)

// Sliding Processing-time window 
.window(Slide over 10.minutes every 5.minutes on 'proctime as 'w)

// Sliding Row-count window
.window(Slide over 10.rows every 5.rows on 'proctime as 'w)

会话窗口(Session windows):

  1. 会话窗口(Session windows)要用Session类来定义
  2. withGap:会话时间间隔
  3. on:用来分组(按时间间隔)或者排序(按行数)的时间字段
  4. as:别名,必须出现在后面的groupBy中
// 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

  1. Over window 聚合是标准 SQL 中已有的(over 子句),可以在查询的 SELECT 子句中定义
  2. Over window 聚合,会针对每个输入行,计算相邻行范围内的聚合
  3. Over windows 使用 window(w:overwindows*)子句定义,并在 select()方法中通过别名来引
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值