Flink SQL Over 聚合详解
发布网友
发布时间:2024-09-25 18:58
我来回答
共1个回答
热心网友
时间:2024-10-04 19:05
Over 聚合定义(支持 Batch\Streaming):特殊的滑动窗⼝聚合函数,与窗口聚合相比,Over 聚合能够保留原始字段。
窗口聚合:不在 group by 中的字段,不能直接在 select 中拿到。
Over 聚合:能够保留原始字段。
生产环境中,Over 聚合的使用场景较少。
应用场景:计算最近一段滑动窗口的聚合结果数据。
实际案例:查询每个产品最近一小时间订单的金额总和。
Over 聚合语法如下:
ORDER BY:必须是时间戳列(事件时间、处理时间);
PARTITION BY:标识了聚合窗口的聚合粒度,如上述案例是按照 product 进行聚合;
range_definition:标识聚合窗口的聚合数据范围,在 Flink 中有两种指定数据范围的方式。第一种为按照行数聚合,第二种为按照时间区间聚合。
时间区间聚合
案例:输出一个产品最近一小时间数据的 amount 之和。
结果就是最近一小时间数据的 amount 之和。
结果如下:
行数聚合
案例:输出一个产品最近 5 行数据的 amount 之和。
结果如下:
在一个 SELECT 中有多个聚合窗口,简化写法如下:
热心网友
时间:2024-10-04 18:58
Over 聚合定义(支持 Batch\Streaming):特殊的滑动窗⼝聚合函数,与窗口聚合相比,Over 聚合能够保留原始字段。
窗口聚合:不在 group by 中的字段,不能直接在 select 中拿到。
Over 聚合:能够保留原始字段。
生产环境中,Over 聚合的使用场景较少。
应用场景:计算最近一段滑动窗口的聚合结果数据。
实际案例:查询每个产品最近一小时间订单的金额总和。
Over 聚合语法如下:
ORDER BY:必须是时间戳列(事件时间、处理时间);
PARTITION BY:标识了聚合窗口的聚合粒度,如上述案例是按照 product 进行聚合;
range_definition:标识聚合窗口的聚合数据范围,在 Flink 中有两种指定数据范围的方式。第一种为按照行数聚合,第二种为按照时间区间聚合。
时间区间聚合
案例:输出一个产品最近一小时间数据的 amount 之和。
结果就是最近一小时间数据的 amount 之和。
结果如下:
行数聚合
案例:输出一个产品最近 5 行数据的 amount 之和。
结果如下:
在一个 SELECT 中有多个聚合窗口,简化写法如下: