FlinkSQL窗口函数TUMBLE、SESSION 和 HOP的区别

目录

[TUMBLE 滚动窗口(Tumbling Window)](#TUMBLE 滚动窗口(Tumbling Window))

[SESSION 会话窗口(Session Window)](#SESSION 会话窗口(Session Window))

[HOP 滑动窗口(Hopping Window)](#HOP 滑动窗口(Hopping Window))

小结

[HOP 窗口为什么不需要rowtime(事件时间)](#HOP 窗口为什么不需要rowtime(事件时间))

[PROCTIME() vs row_time](#PROCTIME() vs row_time)

[为什么 HOP 窗口常用 PROCTIME()?](#为什么 HOP 窗口常用 PROCTIME()?)

总结

TUMBLE、SESSION可以使用处理时间嘛

[TUMBLE 窗口(滚动窗口)](#TUMBLE 窗口(滚动窗口))

[SESSION 窗口(会话窗口)](#SESSION 窗口(会话窗口))

总结


TUMBLE、SESSION 和 HOP。它们各自的窗口行为和使用场景有所不同

TUMBLE 滚动窗口(Tumbling Window)

滚动窗口是一种固定大小、不重叠的窗口。每个事件只属于一个窗口。

在这个查询中,TUMBLE 窗口定义了一个10秒的固定窗口,每个窗口从row_time的每10秒开始计算。例如,窗口将从00:00:00到00:00:10,然后从00:00:10到00:00:20,依此类推

SESSION 会话窗口(Session Window)

会话窗口根据不活动时间(gap)来定义窗口。事件之间的时间间隔超过指定的gap时,将生成一个新的窗口。

在这个查询中,SESSION 窗口定义了一个会话窗口,gap为10秒。这意味着,如果两个事件之间的时间间隔超过10秒,将创建一个新的会话窗口。

HOP 滑动窗口(Hopping Window)

滑动窗口是一种固定大小且可以重叠的窗口。每个事件可以属于多个窗口。

在这个查询中,HOP 窗口定义了一个10秒的窗口,每5秒滑动一次。这意味着每个窗口大小为10秒,并且每5秒开始一个新的窗口。由于窗口重叠,每个事件可能会属于多个窗口。

小结

  1. TUMBLE 窗口:固定大小的窗口,事件只属于一个窗口。
  2. SESSION 窗口:基于不活动时间间隔(gap)的窗口,适合不规则的事件流。
  3. HOP 窗口:固定大小且可以重叠的窗口,事件可以属于多个窗口。

选择哪种窗口取决于你的应用场景和需求。例如,如果你需要固定时间间隔的统计,可以选择 TUMBLE 窗口;如果你需要处理不规则事件流,可以选择 SESSION 窗口;如果你需要频繁的时间间隔统计,可以选择 HOP 窗口

HOP 窗口为什么不需要rowtime(事件时间)

在Flink SQL中使用 HOP 滑动窗口时,HOP 函数的时间字段通常使用的是 PROCTIME(),而不是 row_time。下面是原因和详细解释:

PROCTIME() vs row_time

  • PROCTIME(): 代表处理时间(Processing Time),即事件被处理的时间。处理时间是Flink系统的本地时间,适用于实时性要求高的应用或当事件时间不重要时使用。

  • row_time: 代表事件时间(Event Time),即事件产生的实际时间。事件时间是从数据流中提取的时间戳,适用于需要基于事件实际时间进行处理的应用。

为什么 HOP 窗口常用 PROCTIME()?

  • 滑动窗口的特性 : HOP 窗口通常用于需要在时间上重叠的统计,例如每隔5秒计算10秒窗口内的统计量。使用 PROCTIME() 可以让你基于系统时间来滑动窗口,适用于需要实时处理的场景。

  • 实时数据处理 : 在很多实时数据处理应用中,系统时间(PROCTIME())足以满足需求。使用 PROCTIME() 可以避免因为事件时间的延迟或乱序引入复杂性。

  • 简化使用 : 对于简单的实时分析或流处理任务,使用 PROCTIME() 可以简化窗口操作,因为不需要处理复杂的事件时间问题,如乱序、延迟等

总结

  • 使用 PROCTIME() 时,HOP 窗口基于系统时间滑动,适合实时数据处理。
  • 使用 row_time 时,HOP 窗口可以基于事件时间滑动,适合需要处理事件时间的场景。

选择哪个时间字段取决于你的业务需求和数据特性。如果实时性和简洁性更重要,PROCTIME() 是一个很好的选择;如果事件时间更重要,则使用 row_time。

TUMBLE、SESSION可以使用处理时间嘛

在Flink SQL中,TUMBLE 和 SESSION 窗口通常用于事件时间,但它们也可以使用处理时间。如果你选择使用处理时间,Flink提供了 PROCTIME() 函数来获取系统当前时间

TUMBLE 窗口(滚动窗口)

使用处理时间的示例:

在这个例子中,PROCTIME() 返回处理时间,窗口从每10秒的处理时间开始计算。每个事件会按照处理时间被划分到相应的窗口中。

SESSION 窗口(会话窗口)

使用处理时间的示例:

在这个例子中,PROCTIME() 返回处理时间。会话窗口会基于处理时间中的不活动间隔(gap)进行划分,每当两个事件之间的处理时间间隔超过10秒,就会创建一个新的会话窗口

总结

  • TUMBLE 窗口:可以使用事件时间或处理时间。使用处理时间时,每个事件根据系统当前时间划分到固定大小的窗口中。
  • SESSION 窗口:也可以使用事件时间或处理时间。使用处理时间时,会话窗口基于事件的处理时间间隔来定义窗口。

选择使用事件时间还是处理时间取决于你的业务需求。如果事件的实际发生时间重要(例如,日志数据或用户活动数据),通常使用事件时间;如果系统时间和实时性更为关键(例如,实时监控数据),则可以使用处理时间

相关推荐
Decay__2 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
Easy_API4 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo4 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
微订校园外卖平台6 小时前
校园外卖平台选模板还是定制:架构、数据流与验收清单
大数据·架构·外卖系统·本地生活·微订
Eloudy7 小时前
Qwen2.5-14B-Instruct-AWQ 模型文件结构分析
大数据·elasticsearch·搜索引擎
Decay__8 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
重生之高冷汉堡包10 小时前
跨境电商运营团队如何安全交接店铺账号?多账号权限管理指南
大数据
玩AI的奶茶10 小时前
MiniMax H3 出 30 秒长片:显存账、拼接法和一次的成本
大数据·人工智能·ai·gpu算力·算力租赁
SelectDB11 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
爱签AI电子合同11 小时前
电子合同全维度实测与选型指南
大数据·人工智能