首页 > 大数据 > Hadoop > Flink SQL - TOP-N 语法
Flink SQL 中的 Top-N 是一种查询方式,用于从数据流中找出最大或最小的 N 个值。Top-N 可以按照不同的维度和条件进行筛选和排序。
按照时间窗口进行 Top-N:使用
OVER 子句和窗口函数,例如
TUMBLE、
HOP、
CUMULATE 等,来指定一个固定或滑动的时间范围,然后对每个窗口内的数据进行 Top-N。例如:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY window_start, window_end ORDER BY total DESC) as row_num FROM ( SELECT supplier_id, SUM(price) AS total, TUMBLE_START(order_time, INTERVAL '10' MINUTE) AS window_start, TUMBLE_END(order_time, INTERVAL '10' MINUTE) AS window_end FROM Orders GROUP BY supplier_id, TUMBLE(order_time, INTERVAL '10' MINUTE) ) ) WHERE row_num <= 3;
按照分组进行 Top-N:使用
PARTITION BY 子句和其他字段或表达式,来指定一个分组的维度,然后对每个分组内的数据进行 Top-N。例如:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) as row_num FROM Products ) WHERE row_num <= 5;
按照全局进行 Top-N:不使用
PARTITION BY 子句,直接对整个数据流进行 Top-N。例如:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY amount DESC) as row_num FROM Transactions ) WHERE row_num <= 10;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70024433/viewspace-2965735/ ,如需转载,请注明出处,否则将追究法律责任。