flink sql实现分组聚合有多种方式。
第一种,GROUP BY
将需要分组的字段放在group by子句即可,把时间字段放在group by下可实现开窗的功能。
SELECT COUNT(*)
FROM Orders
GROUP BY order_id
第二种,GROUP BY GROUPING SETS
GROUP BY GROUPING SETS ((supplier_id, rating), (supplier_id), ())
第三种,GROUP BY ROLLUP
GROUP BY ROLLUP (supplier_id, rating)效果同上。
第四种,GROUP BY CUBE
GROUP BY CUBE (supplier_id, rating, product_id)
会对cube的字段的各种组合进行分组聚合
分组开窗操作
SQL中只支持基于时间的窗口
第一种:将窗口放在groupby子句下
这种方式在1.13后被标记为过时。
滚动窗口:TUMBLE(time_attr, interval)
滑动窗口:HOP(time_attr, interval, interval)
会话窗口:SESSION(time_attr, interval)
例子:
SELECT
user,
TUMBLE_START(order_time, INTERVAL ‘1’ DAY) AS wStart,
SUM(amount) FROM Orders
GROUP BY
TUMBLE(order_time, INTERVAL ‘1’ DAY),
user
第二种:Window TVF Aggregation(更强大)