Flink - Table API 之 window (窗口)

本文详细介绍了Flink中的窗口操作,包括Group Windows(滚动窗口、滑动窗口和会话窗口)和Over Windows的使用。在Table API中,通过Tumble、Slide和Session类来定义不同类型的Group Windows,而在SQL中则使用TUMBLE, HOP和SESSION函数。此外,还探讨了Over Windows的无界和有界窗口,并强调了在SQL中使用Over时的限制和注意事项。" 95971179,8458920,IDE中配置Tomcat服务器指南,"['JavaWeb', '服务器配置', 'IDE集成', 'Tomcat教程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

窗口

  • 时间语义,要配合窗口操作才能发挥作用
  • 在Table API 和 SQL 中,主要有两种窗口

Group Window(分组窗口)

  • 根据时间或行计数间隔,将行聚合到有限的组(Group)中,并对每个组的数据执行一次聚合函数

Over Windows

  • 针对每个输入行,计算相邻范围内的聚合

Group Windows

  • Group Windows是使用window(w:GroupWindows)子句定义的,并且必须由as子句指定一个别名

  • 为了按窗口对表进行分组,窗口的别名必须在group by子句中,像常规的分组字段一样引用

    Table table = input
    	.window(w:GroupWindow] as "w") //定义窗口,别名为"w"
    	.groupBy("w","a")  // 按照字段a和窗口w分组
    	.select("a,b.sum"); // 聚合
    
  • Table API 提供了一组具有特定语义的预定义Window类,这些类会被转换为底层DataStream或DataSet的窗口操作

滚动窗口(Tumbling windows)
  • 滚动窗口要用Tunble类来定义

    //Tumbling Event-time Window
    .window(Tumble.over("10.minutes").on("rowtime").as("w"))
    
    // Tumbling Processing-tiem Window
    .window(Tumble.over("10.minutes").on("proctime").as("w"))
    
    // Tumbling Row-count Window
    .window(Tumble.over("10.rows").on("proctime").as("w"))
    
滑动窗口(Sliding windows)
  • 滑动窗口要用Slide类来定义

    //Sliding Event-time Window
    .window(Slide.over("10.minutes").every("5.minutes").on("rowtime").as("w"))
    
    // Sliding Processing-tiem 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 Window)
  • 会话窗口要用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"))
    
SQL中的Group Windows
  • Group Windows定义在SQL查询的Group By子句中

    TUMBLE(time_attr,interval)

    • 定义一个滚动窗口,第一个参数是时间字段,第二个参数是窗口字段

    HOP(time_attr,interval,interval)

    • 定义一个滑动窗口,第一个参数是时间字段,第二个参数是窗口滑动步长,第三是窗口长度

    SESSION(time_attr,interval)

    • 定义一个会话窗口,第一个参数是时间字段,第二个参数是窗口间隔。
  • 案例代码

    public static void main(String[] args) throws Exception {
         
            StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    
            env.setParallelism(1);
    
            DataStream<String> fileDataStream 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值