flink 窗口表值函数

前言

  从 1.13 版本开始,Flink 开始使用窗口表值函数(Windowing table-valued functions,Windowing TVFs)来定义窗口。窗口表值函数是 Flink 定义的多态表函数(PTF),可以将表进行扩展后返回

滚动窗口(Tumbling Windows)
滑动窗口(Hop Windows,跳跃窗口)
累积窗口(Cumulate Windows)
会话窗口(Session Windows,目前尚未完全支持)

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


1. 滚动窗口(TUMBLE)

  在 SQL 中通过调用 TUMBLE()函数声明一个滚动窗口,只有一个核心参数就是窗口大小(size)。在 SQL 中不考虑计数窗口,所以滚动窗口就是滚动时间窗口,参数中还需要将当前的时间属性字段传入;另外,窗口 TVF 本质上是表函数,可以对表进行扩展,所以还应该把当前查询的表作为参数整体传入

TUMBLE(TABLE EventTable, DESCRIPTOR(ts), INTERVAL '1' HOUR)

2. 滑动窗口(HOP)

  滑动窗口的使用与滚动窗口类似,可以通过设置滑动步长来控制统计输出的频率。在 SQL中通过调用 HOP()来声明滑动窗口;除了也要传入表名、时间属性外,还需要传入窗口大小(size)和滑动步长(slide)两个参数

HOP(TABLE EventTable, DESCRIPTOR(ts), INTERVAL '5' MINUTES, INTERVAL '1' HOURS));

  基于时间属性 ts,在表 EventTable 上创建了大小为 1 小时的滑动窗口,每 5 分钟滑动一次。在时间属性字段后面的第三个参数是步长(slide),第四个参数才是窗口大小(size)


3. 累积窗口(CUMULATE)

  累积窗口是窗口 TVF 中新增的窗口功能,它会在一定的统计周期内进行累积计算。累积窗口中有两个核心的参数:最大窗口长度(max window size)和累积步长(step)。所谓的最大窗口长度就是统计周期,最终目的就是统计这段时间内的数据
在这里插入图片描述

CUMULATE(TABLE EventTable, DESCRIPTOR(ts), INTERVAL '1' HOURS, INTERVAL '1' DAYS))

  基于时间属性 ts,在表 EventTable 上定义了一个统计周期为 1 天、累积步长为 1小时的累积窗口。注意第三个参数为步长 step,第四个参数则是最大窗口长度


Flink是一个流式处理框架,窗口函数是其核心功能之一,用于对数据流进行分组和聚合操作。窗口函数可以将无限的数据流划分为有限大小的窗口,并在每个窗口上执行计算操作。 Flink提供了多种类型的窗口函数,包括滚动窗口、滑动窗口和会话窗口。下面是对这些窗口函数的介绍: 1. 滚动窗口(Tumbling Window):滚动窗口将数据流划分为固定大小的、不重叠的窗口。每个窗口都包含固定数量的元素,并且每个元素只属于一个窗口。滚动窗口适用于对数据流进行离散化处理,例如按小时、按天或按月进行统计。 2. 滑动窗口(Sliding Window):滑动窗口将数据流划分为固定大小的、可能重叠的窗口。与滚动窗口不同,滑动窗口中的元素可以属于多个窗口。滑动窗口适用于需要考虑数据流中相邻元素之间关系的计算,例如计算最近一小时内的平均值。 3. 会话窗口(Session Window):会话窗口根据数据流中的活动时间间隔来划分窗口。当数据流中的元素之间的时间间隔超过指定的阈值时,会话窗口会关闭并输出结果。会话窗口适用于处理具有不确定时间间隔的事件流,例如用户在网站上的访问记录。 在Flink中,可以使用窗口函数对窗口中的数据进行聚合操作,例如求和、计数、平均值等。窗口函数可以通过自定义函数或使用预定义的聚合函数来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值