Flink窗口函数

目录

1. 窗口(Window)

2. 窗口表值函数(Windowing TVFs)

2.1 滚动窗口(TUMBLE)

2.2 滑动窗口(HOP)

2.3 累计窗口(CUMULATE)


1. 窗口(Window)

有了时间属性,接下来就可以定义窗口进行计算了。窗口可以将无界流切割成大小有限的桶来做计算,通过截取有限数据集来处理无限的流数据、

2. 窗口表值函数(Windowing TVFs)

窗口表值函数(table-valued functions)是Flink定义的多表函数(PTF),可以将表进行扩展后返回。

窗口表值函数可以完全替代传统的分组窗口函数,窗口TVF更符合SQL标准,性能得到了优化,拥有更强大的功能。可以支持基于窗口的复杂计算,例如窗口Top-N、窗口联结(window join)等。

在窗口TVF的返回值中,除去原始表中的所有列,还增加了用来描述窗口的额外3个列。窗口起始点(window_start)、窗口结束点(window_end)、窗口时间(window_time)。起始点和结束点比较好理解,窗口时间指的是窗口中的时间属性,它的值等于window_end - 1ms,所以相当于是窗口能够包含数据的最大时间戳。

2.1 滚动窗口(TUMBLE)

滚动窗口有固定的尺寸,窗口间的元素无重复

--语法
--基于时间字段ts,对表EventTable中的数据开了大小1小时的滚动窗口
TUMBLE(TABLE EventTable, DESCRIPTOR(ts), INTERVAL '1' HOUR)

--示例:每10分钟将10分钟内的金额汇总计算
--其中 watermark(`ts` - INTERVAL '1' SECOND 	)
SELECT window_start, window_end, SUM(price)
FROM TABLE(
    TUMBLE(TABLE Bid, DESCRIPTOR(ts), INTERVAL '10' MINUTES))
GROUP BY window_start, window_end;

2.2 滑动窗口(HOP)

--语法
--其中第三个参数是步长slide  第四个参数才是窗口大小size
--基于时间属性ts,在表EventTable上创建了大小为1小时的滑动窗口,每5分钟滑动一次
HOP(TABLE EventTable, DESCRIPTOR(ts), INTERVAL '5' MINUTES, INTERVAL '1' HOURS)


--示例: 将10分钟内的金额汇总计算,并且每5分钟触发一次计算
--其中 watermark(`ts` - INTERVAL '1' SECOND 	)
SELECT window_start, window_end, SUM(price)
FROM TABLE(
    HOP(TABLE Bid, DESCRIPTOR(ts), INTERVAL '5' MINUTES, INTERVAL '10' MINUTES))
GROUP BY window_start, window_end;

2.3 累计窗口(CUMULATE)

同一个窗口会按照步长逐步累计时间的形式,触发窗口计算操作

 

--语法
--第三个参数为步长step,第四个参数则是最大窗口长度(最大窗口长度其实就是我们所说的统计周期,最终目的就是统计这段时间内的数据)
--基于时间属性ts,在表EventTable上定义了一个统计周期为1天、累计步长为1小时的累积窗口
CUMULATE(TABLE EventTable, DESCRIPTOR(ts), INTERVAL '1' HOURS, INTERVAL '1' DAYS)

--示例: 每2分钟计算总金额,并在累积10分钟后,计算总金额
SELECT window_start, window_end, SUM(price)
  FROM TABLE(
    CUMULATE(TABLE Bid, DESCRIPTOR(ts), INTERVAL '2' MINUTES, INTERVAL '10' MINUTES))
  GROUP BY window_start, window_end;

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值