首页 > 大数据 > Hadoop > Flink SQL - Over 聚合
Flink SQL 中的 Over 聚合是一种使用 Over 子句的开窗函数,用于对数据按照不同的维度和范围进行分组和聚合。Over 聚合可以保留原始字段,不像分组聚合只能输出聚合结果和分组字段。Over 聚合的语法如下:
SELECT agg_func(agg_col) OVER ( [PARTITION BY col1 [, col2, ...]] ORDER BY time_col range_definition ), ...FROM ...复制
其中:
ORDER BY:必须是时间戳列(事件时间或处理时间)
PARTITION BY:标识了聚合窗口的聚合粒度,可以按照一个或多个字段或表达式进行分组
range_definition:标识了聚合窗口的聚合数据范围,在 Flink 中有两种指定数据范围的方式:
RANGE BETWEEN INTERVAL ... PRECEDING AND CURRENT ROW 来指定一个向前的时间范围,类似于滑动窗口。例如:SELECT product, order_time, amount, SUM(amount) OVER ( PARTITION BY product ORDER BY order_time RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW ) AS one_hour_prod_amount_sumFROM Orders;复制
ROWS BETWEEN ... PRECEDING AND CURRENT ROW 来指定一个向前的行数范围,类似于数据行数的滑动窗口。例如:SELECT product, order_time, amount, SUM(amount) OVER ( PARTITION BY product ORDER BY order_time ROWS BETWEEN 5 PRECEDING AND CURRENT ROW ) AS five_rows_prod_amount_sumFROM Orders;复制
Over 聚合的应用场景是:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70024433/viewspace-2965731/ ,如需转载,请注明出处,否则将追究法律责任。