Flink实践:Flink窗口函数在SQL中的使用

本文介绍如何利用 Flink SQL 实现滚动窗口和滑动窗口计算,包括 PV 和 UV 的统计方法及参数配置,并提供具体实现代码示例。

1.滚动窗口

        计算每天的pv,uv,可以开一个24h的窗口,统计窗口内数据情况。但是这样有一个问题,flink sql没有办法直接设置trigger,所以只能等待窗口结束后才会有计算结果输出。这往往不是我们想要的,针对这种情况,有两种解决办法,一种是设置参数,提前输出计算结果;另一种办法是开一分钟窗口(根据自己输出频率来设定窗口)做初步聚合,然后根据日期做二次聚合;

        两种方式有一个区别,提前输出方式,因为窗口没有关闭,输出的数据是update,而二次聚合方式,因为窗口已经关闭,所以每分钟都会insert一条数据,当需要数据绘制曲线图时,推荐二次聚合方式,如果只是显示一个计算数字,则推荐使用提前输出方式;

提前输出所需设置参数:

// 设置 early fired
tableEnv.getConfig().getConfiguration().setBoolean("table.exec.emit.early-fire.enabled", true)
tableEnv.getConfig().getConfiguration().setString("table.exec.emit.early-fire.delay", "5000ms")

 注意:这里的时间是指系统时间,而非时间事件。即每隔5秒钟输出数据。

 完整代码如下

import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.table.api.EnvironmentSett
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值