Hive常用函数介绍(窗口函数)
1.窗口函数介绍
窗口函数,也叫也叫OLAP函数(Online Anallytical Processing,联机分析处理),可对数据库数据进行实时分析处理。
2.窗口函数入门
2.1 函数说明
窗口函数,也可以叫做开窗函数,其从本质来看是将 MySQL 中一些复杂的查询封装成了窗口的形式,进行数据统计时使用并且操 作十分方便,窗口函数为统计时使用的聚合函数指定一个聚合的范围。
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化
2.2 函数使用
源数据:
+----------------+---------------------+----------------+
| business.name | business.orderdate | business.cost |
+----------------+---------------------+----------------+
| jack | 2021-07-07 | 110 |
| tony | 2021-07-08 | 115 |
| jack | 2021-08-03 | 123 |
| tony | 2021-07-04 | 129 |
| jack | 2021-07-05 | 146 |
| jack | 2021-10-06 | 142 |
| tony | 2021-07-07 | 150 |
| jack | 2021-07-08 | 155 |
| mart | 2021-10-08 | 162 |
| mart | 2021-10-09 | 168 |
| neil | 2021-11-10 | 112 |
| mart | 2021-10-11 | 175 |
| neil | 2021-12-12 | 180 |
| mart | 2021-10-13 | 194 |
+----------------+---------------------+----------------+
计算每个人消费总额,并且按照名字进行分组
select name,cost,sum(cost) over(partition by name) from business;
可以看到,这里有4个人,所以开了4个窗口,并且每个窗口都统计了单个人的总消费金额
了解了基本的用途之后,我们开始来使用几个基础的函数
- CURRENT ROW:当前行
- n PRECEDING:往前 n 行数
- n FOLLOWING:往后 n 行数据
- UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点
- UNBOUNDED FOLLOWING:表示到后面的终点
我将结合案例进行演示,以便更好的理解
案例1:求当前日期的消费总额以及截至当前日期的总消费总额。
思路讲解:利用开窗函数的机制,我们可以在求和的时候进行开窗统计,首先根据日期进行排序,并将上一行的值与本行相加,便可以得出当前日期的总消费金额,以此类推。
select name,orderdate,cost,sum(cost) over(order by orderdate range between unbounded preceding and current row) from business;
3.窗口函数使用
3.1取值函数
first_value():返回分组类第一个值
last_value():返回分组类最后一个值
select name,cost,first_value(cost) over() `first`,last_value(cost) over() `last`from business;
nth_value():返回分组内第N行
select name,cost,rank() over() `id`,nth_value(cost,2) over() `nth2`,nth_value(cost,4) over() `nth4`,nth_value(cost,6) over() `nth6` from business;
lag():从当前行开始往前去第N行,默认为NULL
lead():从当前行开始往后去第N行,默认为NULL
需求:查看每个人上次以及下次的购买时间
select name,cost,lag(orderdate,1,null) over(partition by name order by orderdate) `lag`,lead(orderdate,1,null) over(partition by name order by orderdate) `lead` from business;
ntile():用于将分组数据按照顺序切分成n片
select
name,cost,orderdate,
ntile(5) over(order by orderdate) sorted
from
business;
percent_rank():统计当前行在整个有序窗口中占的百分比数,返回0到1之间变化
select
name,cost,orderdate,
percent_rank() over(order by orderdate)
from
business;
3.2 排序函数
rank():有重复值时候间断排序,例如 1,2,2,4,4,6
dense_rank():有重复值时候不间断排序,例如 1,2,2,3,3,4
row_number():不间断排序,有重复值时,会根据内置算法进行排序,1,2,3,4
张三 20
李四 27
王五 29
赵六 22
田七 26
马八 24
黄九 23
罗十 28
郑三 27
吴四 20
高五 25
薛六 22
楚七 22
朱八 27
用三种方法对年纪进行排序
select
name,age,
rank() over(order by age) `rank`,
dense_rank() over(order by age) `dense_rank()`,
row_number() over(order by age) `row_number`
from stu;
3.3 聚合函数
sum():求和
avg():平均值
max():最大值
min():最小值
count():计数统计
select name,age,
sum(age) over()`sum`,
avg(age) over()`avg`,
max(age) over()`max`,
min(age) over()`min`,
count() over()`count`
from stu;
hive中关于窗口函数的讲解就介绍这么多,希望各位看客多多支持
Hive常用函数介绍(窗口函数)相关推荐
- HIVE 常用函数总结
HIVE 常用函数总结 hive 函数比较多,之前总是随用随查,今天把常用的函数总结一下,以后方便查阅. 本文主要涉及以下几个大面: 1.Hive函数介绍以及内置函数查看 内容较多,见<Hive ...
- hive常用函数(一)
hive常用函数一般分为下面几个部分: 算数运算符:+,- ,*, / 关系运算符:== , <>(不等于) , > , >= , < , <= 逻辑运算符:and ...
- Hive常用函数大全一览
Hive常用函数大全一览 1 关系运算 1.1 1.等值比较: = 1.2 2.不等值比较: 1.3 3.小于比较: < 1.4 4.小于等于比较: <= 1.5 5.大于比较: > ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- php spl函数,PHP SPL标准库中的常用函数介绍
这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions().spl_autoload_register().spl_autoload()三 ...
- R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal、fa、fa.parallel、factor.plot、fa.diagram、scree
R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal.fa.fa.parallel.factor.plot.fa.diagram.scree 目录
- 最详细的HIve常用函数整理及案例演示
Hive常用函数 一.测试数据集 1.1 测试数据集: 1.2 结果展示 二.常用函数 2.1 关系运算 2.1.1 常见关系运算符 2.1.2 空值判断 2.1.3 非空判断 2.1.4 LIKE ...
- oracle常用函数number,Oracle 常用函数介绍
Oracle常用函数介绍,包括日期函数.类型转换函数 常用日期函数 1.add_months()函数可以得到指定日期之前或之后n个月的日期 date_value:=add_months(date_va ...
- Hive常用函数 - abs
Hive常用函数 - abs 官方解释 abs(x) - returns the absolute value of x 个人理解 就是返回函数括号内数字的绝对值. 想要获取该数的绝对值的时候就用这个 ...
最新文章
- GridView强制换行与自动换行
- BZOJ 3884 上帝与集合的正确用法 (欧拉定理)
- Spring Cloud Stream 使用延迟消息实现定时任务(RabbitMQ)
- Ansible16:Playbook高级用法
- 【案例】ZigBee无线模块在城市智能照明上的应用
- 怎样让手中的钱成为生财工具
- 计算机网络引言,[计算机网络]Ch.1引言
- 7-43 币值转换 (20分)_「篮球看吧」40岁了!生涯25年!还狂砍33分+联赛得分王,这他么是人吗...
- 在Linux上安装Chef工作站
- hadoop 3.x 关闭安全模式
- latex sign_LATEX科研论文写作教程
- 2.4 HDFS组成架构
- WCF把书读薄(3)——数据契约、消息契约与错误契约
- Kconfig语法学习
- 实盘中在vnpy多策略多交易对交易
- 中国牛市短线炒股有哪些特征中国牛市炒股如何操作呢
- win10系统设置番茄家园开机音乐以及关机音乐(亲测有效)
- 基于单片机的室内空气质量检测系统(甲烷甲醛)
- 正则表达式 基本汉字 特殊字符
- 2022年全国最新高级消防设施操作员模拟题库及答案