Hive常用函数介绍(窗口函数)

2023-10-30

 

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中关于窗口函数的讲解就介绍这么多,希望各位看客多多支持

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive常用函数介绍(窗口函数) 的相关文章

随机推荐

  • Tableau 二、数据前处理、折线图、饼图

    二 数据前处理 折线图 饼图 1 数据前处理 导入 中国电影网电影 data xlsx 拆分 电影名 右击 电影名 选中该列 拆分 则会自动拆分 自动拆分针对数据有一定格式的 删除 电影名 拆分 电影名 拆分 将 电影名 拆分 1 右击 重
  • spreadjs学习总结(持续更新)

    前言 苦于spreadjs学习教程和案例非常少 于是自己慢慢学习 慢慢总结出来 便于复习与巩固 申请试用可以获取官方技术人员免费30天技术指导 学习常用链接 spreadjs官网 spreadjs示例 spreadjs学习视频 spread
  • Linux:Ubuntu上运行qt时报错Could not load the Qt platform plugin “xcb“ in ““ even though it was found.

    报错信息如下 Cannot load library root anaconda3 envs sifa plugins platforms libqxcb so libxcb render util so 0 cannot open sha
  • openwrt启动流程

    了解Openwrt系统的启动流程 1 1 系统介绍 任何系统的启动都是开发人员首要关注的问题 因为只有了解了系统的启动流程和启动机制 才能真正掌握一个系统 如果对系统的启动不熟悉的话 是不可能用好一个系统的 Openwrt系统也不例外 他的
  • 交叉验证(Cross-Validation)

    交叉验证 Cross Validation 目录 交叉验证 Cross Validation 一 基本方法 1 保留交叉验证 hand out cross validation 2 k折交叉验证 k fold cross validatio
  • 【android】ListView之BaseAdapter使用详解

    android中ListView是一个比较常用的控件 它用于方便的列表显示可见数据 当数据过多时 会出现滚动条 并且可以根据屏幕长度进行自适应显示 1 为什么使用BaseAdapter ListView需要设置数据适配 就是添加你需要显示的
  • BootStrap实现带有增删改查功能的表格(DEMO详解)

    前言 bootstrap的表格样式 有类似EasyUI的表格 也有卡片式表格 放到移动端显示 各有千秋 但是BootStrap自带的表格是没有操作列的 网上的资源不少 但是都是比较单一 零碎 JS CSS也经常给的不全 自己经过大概一个月左
  • 【Spring Data JPA】JPA常用注解

    文章目录 常用基本注解 Entity 指定该实体类被JPA管理 Table 指定该实体类对应哪张表 Id 单个主键 IdClass 联合主键 Column 表示实体类属性对应数据库表的哪一字段 列 OneToOne 联合主键代码示例 常用基
  • Dsp28335点亮LED灯(学习笔记)

    文章目录 一 前言 1 1 设计思路 1 2 工具 1 3 原理介绍 二 步骤 2 1 程序编写 三 验证 一 前言 1 1 设计思路 用DSP28335GPIO68管脚输出低电平 点亮LED灯 1 2 工具 1 普中科技开发板 TMS32
  • Python报UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position的解决办法

    with open input txt as f for line in f print line 按行读取文本文件时报错 UnicodeDecodeError gbk codec can t decode byte 0xad in pos
  • MYSQL 存储过程详解

    用了多年的mysql 基本上都是在写增删改查的SQL语句 对存储过程只是有所耳闻 一直没有认真的去了解 使用过 所以编写这篇文档 记录对存储过程的学习笔记 和 mysql函数编程的一些基础知识 目录 概念 创建存储过程 IN OUT INO
  • 用Python+PIL将目录下jpg图像批量转成pdf文件

    一 引言 最近单位有个事 需要将一堆图片文件先转成pdf文件 同事下了个windows下的图形软件 但要一个个转 几百个jpg文件 太过麻烦 因此想用Python批量来做 一查 图像处理库PIL库可以支持 一试 花了半个小时搞定 在此分享一
  • finclip小程序运行机制与微信小程序运行机制

    根据运行小程序的宿主应用环境不同 小程序也会有不同的启动机制 1 小程序启动 小程序会有两种情况 一种是冷启动 一种是热启动 冷启动 用户首次打开或小程序被宿主应用主动销毁后再次打开的情况 此时小程序需要重新加载启动 即冷启动 热启动 假如
  • openWRT系统删除文件出现 Read-only file system 错误

    是因为断电意外关机 再重启后系统文件变成了只读 我用下面办法解决了 ssh登录后执行命令 e2fsck y dev sda2 然后reboot一下就可以了 goodluck
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Notepad++的HEX-Editor插件

    安装HEX Editor既可以联网安装如下 也可以直接把HexEditor dll下载好了放到plugins插件文件夹里面 1 到网站下载Hex Editer工具 https sourceforge net projects npp plu
  • arduino uno r3 控制42不进电机+TB6600驱动

    1 接线图如下 2 arduino和TB6600链接 arduino TB6600 GND ENA 空 ENA GND DIR 5口 DIR GND PUL 6口 PUL 3 TB6600和42不进电机链接 TB6600 42不进电机 A
  • Spring系列学习之Spring Cloud GCP Google云平台消息传递及存储

    英文原文 https spring io projects spring cloud gcp 目录 概述 特性 入门 快速开始 学习 文档 示例 概述 Spring Cloud GCP项目旨在使Spring Framework成为Googl
  • Scanner注意事项与报错(next()、nextInt()、nextline()等)

    首先介绍一个经典的问题 nextline和nextInt混用出现的问题 当前面有nextInt时 nextLine不会等待你输入字符串 如下 如图 控制台还没有等我输入字符串就直接输出了num 因为你输入10的时候实际是按了回车 因此输入的
  • Hive常用函数介绍(窗口函数)

    1 窗口函数介绍 窗口函数 也叫也叫OLAP函数 Online Anallytical Processing 联机分析处理 可对数据库数据进行实时分析处理 2 窗口函数入门 2 1 函数说明 窗口函数 也可以叫做开窗函数 其从本质来看是将