Hive第六天——Hive函数(开窗函数之累计统计)


本文部分参考自:https://blog.csdn.net/qq_23897391/article/details/100558433


Hive第六天——Hive函数

自己的话:千里之行,始于足下。

每天都要保持前进,我势必要有强劲的实力,再跟明天的自己问好。

开窗函数:累计统计


这类函数叫法很多,包括分析函数、窗口函数、开窗函数、分析窗口函数,其实说的都是一类函数

一、开窗函数简介

开窗函数用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。


二、开窗函数语法

1.开窗函数的语法为:
  • over(partition by 列名1,列名2 …… order by 列名3,列名4 …… [desc])

  • 括号中的两个关键词partition by 和order by 可以只出现一个。

  • partition by 和order by 后面的列名可以根据需求设定任意数量个列名。

  • order by后面可以选择是否跟desc,加上为倒序排序(从大到小),不加则默认为从小到大排序。

  • over() 前面是一个函数。

2.分段解析:
sum(columns) over (partition by col1 order by col2 rows between n/unbounded preceding and m following/current row )

如果不指定rows between,默认为从起点到当前行;
如果不指定order by,则将分组内所有值累加;

关键是理解rows between含义,也叫做window子句:

  • preceding:往前
  • following:往后
  • current rows:当前行
  • unbounded:起点
  • unbounded preceding:表示从前面的起点
  • unbounded following:表示到后面的终点

三、开窗函数分类

在Hive中开窗函数按功能主要分为以下四类:

  • 组内累计统计
  • 组内排序
  • 组内层次查询
  • 组内偏移关联

四、组内累计统计开窗函数

Hive中提供了很多分析函数,用于完成负责的统计分析。先看看基础的sum,avg,min,max,用于实现分组内所有和连续累计的统计。

数据准备:
新建test.txt文件,输入如下的三列数据,以空格分隔。第一列是月份,第二列代表商铺名称,第三列代表该商铺该月营业额(万元)。

[root@hadoop ~]# vim test.txt 
 
2019-01 a 10
2019-02 a 20
2019-03 a 30
2019-01 b 10
2019-02 b 20
2019
  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive中的函数(Window Functions)是一种在查询结果集中进行计算并返回结果的函数。它可以用来计算一些聚合函数的子集,如累计和、排名、分组百分比等等。 Hive支持以下几种函数: 1. ROW_NUMBER():用于返回每个分区中行的序号,从1始计数; 2. RANK():用于返回每个分区中行的排名,相同的值排名相同,排名相同时下一个排名会跳过; 3. DENSE_RANK():用于返回每个分区中行的密集排名,相同的值排名相同,排名相同时下一个排名不会跳过; 4. PERCENT_RANK():用于返回每个分区中行的百分比排名,即排名/(分区行数-1); 5. CUME_DIST():用于返回每个分区中行的累计分布函数值,即小于等于当前值的行数占总行数的比例; 6. LAG():用于返回当前行指定偏移量之前的行的值; 7. LEAD():用于返回当前行指定偏移量之后的行的值; 8. FIRST_VALUE():用于返回每个分区中第一行的值; 9. LAST_VALUE():用于返回每个分区中最后一行的值; 10. AVG()、SUM()、MIN()、MAX()、COUNT()等聚合函数函数需要使用 OVER() 关键字和 PARTITION BY 子句进行分区,并可以使用 ORDER BY 子句进行排序。例如,以下是一个使用 ROW_NUMBER() 函数Hive 查询示例: ``` SELECT id, name, ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) AS row_num FROM student; ``` 该查询将返回一个结果集,其中包含每个学生的id、name和按照name进行分区后的行号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值