ITPub博客

首页 > 大数据 > Hadoop > Flink SQL - TOP-N 语法

Flink SQL - TOP-N 语法

原创 Hadoop 作者:元亨利贞 时间:2023-07-21 17:12:58 0 删除 编辑

介绍

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;


Top-N 的应用场景

  • 实时排行榜:例如实时统计每个窗口内销售额最高的商品、每个类别内浏览量最高的文章等。
  • 实时异常检测:例如实时监控每个窗口内温度最高的传感器、每个分组内延迟最高的请求等。
  • 实时优化决策:例如实时选择每个窗口内收益最高的广告、每个分组内评分最高的推荐等。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70024433/viewspace-2965735/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    383
  • 访问量
    248008