ITPub博客

首页 > 大数据 > Hadoop > Flink SQL - Over 聚合

Flink SQL - Over 聚合

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

介绍

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/ ,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2022-11-21

  • 博文量
    383
  • 访问量
    247996