Hive-函数-窗口函数

常用窗口函数

Hive中常用的窗口函数(也称为开窗函数)丰富多样,这些函数能够在进行数据分析时提供强大的支持,特别适用于需要对分组数据进行复杂计算和排序的场景。以下是Hive中常用的一些窗口函数及其简要说明:

序号函数

  • ROW_NUMBER():为窗口内的每一行生成一个唯一的序号,序号从1开始,按照指定的排序顺序递增。
  • RANK():为窗口内的每一行生成一个排名,排名相同的行会获得相同的排名,且排名之间会留下空位。
  • DENSE_RANK():与RANK()类似,但排名相同的行会获得相同的排名,且排名之间不会留下空位。
  • NTILE(n):将窗口内的行分成n个桶,并为每行分配一个桶号。桶的分配尽量均匀,如果无法均匀分配,则优先分配较小编号的桶。

分布函数

  • PERCENT_RANK():返回窗口内当前行的百分比排名。
  • CUME_DIST():计算窗口内小于等于当前值的行数占总行数的比例,通常用于计算累积分布。

前后函数

  • LAG(col, n):返回窗口内当前行前面第n行的值,如果不存在则返回NULL。
  • LEAD(col, n):返回窗口内当前行后面第n行的值,如果不存在则返回NULL。

头尾函数

  • FIRST_VALUE():返回窗口内的第一个值。
  • LAST_VALUE():返回窗口内的最后一个值。

聚合函数+窗口函数联合

Hive还支持将常用的聚合函数(如SUM、AVG、MAX、MIN、COUNT)与窗口函数结合使用,以实现更复杂的计算。例如:

  • SUM(col) OVER(…):计算窗口内指定列的总和。
  • AVG(col) OVER(…):计算窗口内指定列的平均值。
  • MAX(col) OVER(…):计算窗口内指定列的最大值。
  • MIN(col) OVER(…):计算窗口内指定列的最小值。
  • COUNT(col) OVER(…):计算窗口内指定列中非NULL值的数量。

注意事项

  • 窗口函数必须与OVER()子句一起使用,通过OVER()子句可以指定窗口的分区(PARTITION BY)、排序(ORDER BY)以及窗口的大小和位置(ROWS/RANGE BETWEEN…AND…)。
  • 窗口函数在处理数据时,会为窗口内的每一行都执行计算,而不是将多行数据聚合成一行。
  • 窗口函数兼具GROUP BY子句的分组功能以及ORDER BY子句的排序功能,但PARTITION BY子句并不具备GROUP BY子句的汇总功能。

使用示例

当然可以,以下是为每个提到的窗口函数提供的Hive SQL示例。请注意,这些示例假设我们有一个名为sales的表,其中包含sales_date(销售日期)、region(地区)和amount(销售额)等字段。

序号函数

ROW_NUMBER()

SELECT
  sales_date,
  region,
  amount,
  ROW_NUMBER
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白日与明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值