Hive的窗口函数

news2025/1/23 9:17:26
定义:
聚合函数是针对定义的行集()执行聚集,每组只返回一个值.sum()avg()max()
窗口函数也是针对定义的行集()执行聚集,可为每组返回多个值.如既要显示聚集前的数据,又要显示聚集后的数据.

步骤:
1.将记录分割成多个分区.
2.在各个分区上调用窗口函数.  

语法:
--先执行over后面的部分,再执行over前面的部分.  
function() over (PARTITION BY(col1,col2...) ORDER BY(col3,col4...))
--函数       over  根据某条件分组,形成一个小组   再组内进行排序 
--现有一张表wt1,字段有id、name、age,数据如下
--数据
1   a1  10
2   a2  10
3   a3  10
4   a4  20
5   a5  20
6   a6  20
7   a7  20
8   a8  30

统计函数

不分区只排序

-- 窗口范围是整个表
-- 按照age排序,每阶段的age数据进行统计求和.
select id,name,age,count() over (order by age) as n from wt1;  

在这里插入图片描述

相同字段分区、排序

-- 窗口范围是表下按照age进行分区
-- 在分区里面,再按照age进行排序
select id,name,age,count() over (partition by age order by age) as n from wt1;  
-- 若分区和排序是同一字段时,可以省略order by语句.

在这里插入图片描述

不同字段分区、排序

-- 窗口范围是表下按照age进行分区
-- 在分区里面,再按照id进行排序
select id,name,age,count() over (partition by age order by id) as n from wt1;  
-- 可以根据需要对order by进行asc,desc

在这里插入图片描述

序列函数

rank

会对相同数值,输出相同的序号,而且下一个序号间断,  如:1、1、3、3、5. rank(等级)  

dense_rank

会对相同数值,输出相同的序号,而且下一个序号不间断,如:1、1、2、2、3. dense(稠密的)

row_number

会对所有数值,输出不同的序号,序号唯一且连续,如:1、2、3、4、5.
select id,name,age,sex,
rank() over(partition by sex order by age desc) as rk,
dense_rank() over(partition by sex  order by age desc) as drk,
row_number() over(partition by sex order by age desc) as rn
from stu;

在这里插入图片描述

行选择函数

-- 语法
over (rows between num 函数 and 函数)

-- 关键词释义
:'
following
在后N行; following--(时间上)接着的,下述的,下列的.
preceding
在前N行; preceding--在…之前发生(或出现),先于,走在…前面.
unbounded
不限行数; unbounded--无穷的,无尽的,无限的.  
current row
当前行; current--现时发生的,当前的,现在的,通用的,流通的,流行的.
'

-- 窗口中的整个范围
rows between unbounded preceding and unbouned following
-- 从窗口的前无限行到当前行
rows between unbounded preceding and current row
-- 从窗口的当前行的前2行到当前行
rows between 2 preceding and current row
-- 从窗口的当前行到当前行的后2行
rows between current row and 2 following
-- 现有一张表sale、有y、m、rmb三个字段,数据如下
-- 数据
年份  月份  销售额
2017    01  1000
2017    02  1000
2017    03  3000
2017    04  3000
2017    05  5000
2017    06  5000
2017    07  1000
2017    08  1000
2017    09  3000
2017    10  3000
2017    11  5000
2017    12  5000
2018    01  1000
2018    02  2000
2018    03  3000
2018    04  4000
2018    05  5000
2018    06  6000
-- 查询当月销售额和近三个月的销售额
select y,m,rmb,
sum(rmb) over(order by y,m rows between 2 preceding and current row) as s
from sale;
-- 从结果可以看出,窗口函数的结果是包括本行在内的前三月的总和.

在这里插入图片描述

-- 查询当月销售额和今年年初到当月的销售额
SELECT y,m,rmb,
sum(rmb) over(partition by y order by m rows between unbounded preceding and current row) as s
from sale;

在这里插入图片描述

值选择函数

-- 上面知道了行选择函数的写法是:
sum() over(partition by xx order by xx rows between xx and xx)
-- 相类似的,值选择函数的写法就是:
sum() over(partition by xx order by xx range between xx and xx)rows是物理窗口,是哪一行就是哪一行,与当前行的值(order by keykey的值)无关,只与排序后的行号相关,就是我们常规理解的那样。
• range是逻辑窗口,与当前行的值有关(order by keykey的值),key上操作range范围。

切片函数

-- ntile(n),用于将数据按照排序规则切分成n片,返回当前切片的序号,ntile不支持 rows between.
select y,m,rmb,ntile(2) over (partition by y order by m desc) as n from sale;

在这里插入图片描述

-- 如果切片不均匀,默认增加第一个切片的分布.  
select y,m,rmb,ntile(5) over (order by y,m) as n from sale;

在这里插入图片描述

lag、lead分析函数

-- lag和lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。
-- 这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率,其中over()表示当前查询的结果集对象,括号里面的语句则表示对这个结果集进行处理.

-- 函数介绍
LAG
LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值
参数1为列名,参数2为往上第n行(可选,默认为1),参数3为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

LEAD
与LAG相反
LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值
参数1为列名,参数2为往下第n行(可选,默认为1),参数3为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL).
select y,m,rmb,
lag(rmb,1) over(partition by y order by m) as lag_rmb,
lead(rmb,1) over(partition by y order by m) as lead_rmb
from sale;

first_value()、last_value()取值函数

-- first_value() 的结果容易理解,直接在结果的所有行记录中输出同一个满足条件的首个记录;

-- last_value() 默认统计范围: rows between unbounded preceding and current row,也就是取当前行数据与当前行之前的数据的比较,如果需要在结果的所有行记录中输出同一个满足条件的最后一个记录,在order by 条件的后面加上语句:rows between unbounded preceding and unbounded following。
select y,m,rmb,
first_value(rmb) over(partition by y order by rmb desc) as rmb_first,
last_value(rmb) over(partition by y order by rmb desc rows between unbounded preceding and unbounded following) as rmb_last
from sale;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1681473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Pixi.js 图片切换特效(图片分段下滑以及复原)

1.效果: 2.实现原理: 将图片按宽高切分为x*y(具体可以自己调整)个矩形区域,对每个顶点分配一个随机值noiseValue(-1到1之间),在顶点着色器中根据这个随机值而做出不同的y轴位移效果从而实现出分段的下滑或者复原的效果。 3.代码实现: 首先是顶点着色器的代码,其中…

java优先级队列

1. 优先级队列 1.1 概念 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队 列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然…

OpenSearch LLM智能问答版全新升级

阿里云OpenSearch LLM智能问答版是OpenSearch推出的一站式开箱即用的检索增强生成(RAG)云产品,帮助开发者快速构建多模态对话式搜索服务。 自2023年6月上线以来,OpenSearch LLM智能问答版已累计支持了数百家云上客户搭建RAG系统&…

人工智能|深度学习——YOLOV8结构图

YoloV8相对于YoloV5的改进点: Replace the C3 module with the C2f module.Replace the first 6x6 Conv with 3x3 Conv in the Backbone.Delete two Convs (No.10 and No.14 in the YOLOv5 config).Replace the first 1x1 Conv with 3x3 Conv in the Bottleneck.Use…

免费SSL证书签发安装指南

一、签发 1.选择证书颁发机构(CA):首先,你需要找到一个提供免费SSL证书的CA。有些CA会提供永久免费的SSL证书,而有些则可能只提供有限时间的试用证书,如JoySSL就提供永久免费证书。 2.生成CSR&#xff08…

【面试干货】 两个有序数组的合并排序

【面试干货】 两个有序数组的合并排序 1、实现思想2、代码实现 💖The Begin💖点点关注,收藏不迷路💖 1、实现思想 使用两个指针分别指向两个数组的起始位置,然后逐个比较两个指针所指向的元素,将较小的元素…

云原生 初识Kubernetes的理论基础

一、k8s 的由来及其技术运用 1.1 k8s的简介 Kubernetes,词根源于希腊语的 舵手、飞行员。在国内又称k8s(因为k和s之间有8个字母,所以得名。“国内程序员的幽默”)。 作用: 用于自动部署、扩展和管理“容器化&#x…

OpenAI发布会最新消息!ChatGPT新功能发布!

关于即将发布的内容,OpenAI 官方帖子提供的唯一细节是,此次发布将更新 ChatGPT 及其最新模型 GPT-4。 OpenAI 员工程博文(Bowen Cheng)跟了个帖,「比 gpt-5 更酷」,不过又迅速删帖。 OpenAI 的葫芦里到底卖…

C 深入指针(4)

目录 一、字符指针变量 1 初始化 2 与字符串数组的区别 二、数组指针变量 1 初始化 2 二维数组传参本质 三、函数指针变量 1 初始化 2 用法 四、typedef关键字 五、函数指针数组 一、字符指针变量 1 初始化 //VS2022 x64 #include <stdio.h> int main() {…

前端 JS 经典:数组去重万能方法

前言&#xff1a;只需要掌握这一个方法&#xff0c;就可以对有任何重复的数据数组&#xff0c;进行去重了。 可以自己思考下&#xff0c;怎么对以下对象数组去重&#xff1a; const arr [{ a: 1, b: 2 },{ b: 2, a: 1 },{ a: 1, b: 2, c: { a: 1, b: 2 } },{ b: 2, a: 1, c:…

vue2 中使用audio播放音频

<audio controls ref"audioPlayer" style"width:800px;"><source :src"obj.audioUrl" /></audio> data() {return {obj: {audioUrl: require(../../../../public/audio/video.wav)}}}, 有个地方一定要注意一下. 如果不写req…

推荐丨免费的HTTPS证书在哪里可以申请?怎么申请?

当然&#xff0c;申请HTTPS证书的简化流程大致可以分为以下四个步骤&#xff1a; 1. 确定证书类型&#xff1a; - 首先&#xff0c;根据你的网站需求选择合适的HTTPS证书。常见类型包括&#xff1a;域名验证型&#xff08;DV&#xff09;、组织验证型&#xff08;OV&#xff09…

智慧校园是什么?如何定义?

智慧校园从边界上来说&#xff0c;是指以物联网为中心的智慧化的学校学习、日常生活一体化的环境&#xff0c;经过信息化手法将教育、教务办理和学校日子进行充沛交融&#xff0c;完结智慧化服务和办理的学校形式。 现在智慧校园已成未来趋势&#xff0c;我国的学校环境阅历了巨…

在springboot项目中自定义404页面

今天点击菜单的时候不小心点开了一个不存在的页面&#xff0c;然后看到浏览器给的一个默认的404页面 后端的程序员都觉得这页面太丑了&#xff0c;那么怎么能自定义404页面呢&#xff1f; 很简单&#xff0c;在我们的springboot的静态资源目录下创建一个error包&#xff0c;然…

氮气柜开门停止充氮、开门亮灯和超湿报警功能介绍

氮气柜是一种专门设计用于存储对湿度敏感的电子元器件、半导体材料、精密仪器、化学试剂等物品的设备&#xff0c;它通过注入高纯度氮气来降低内部湿度&#xff0c;以防止物品受潮或氧化。除基本功能外&#xff0c;沐渥科技新增了开门停止充氮、开门亮灯以及超湿报警这三个功能…

特征衍生-多变量交叉组合特征衍生

https://www.bilibili.com/video/BV1Kg411n7jv?p21&vd_source08e23da22e328e8950aeb24d2001d586

【AI绘画】Stable diffusion初级教程08——提示词(prompt)该如何写

今天是一篇干货&#xff0c;干的喝水的那种…… 写之前呢&#xff0c;先给大家打个比方&#xff1a;现在刚入门学习SD的相当于刚上学的小学生&#xff0c;提示词就相当于作文&#xff0c;还是英语作文&#xff0c;如果你总是抄抄抄&#xff0c;不知道作文的要点&#xff0c;语法…

笔记-Windows NFS → 中文乱码导致文件找不到

前提准备 项目中有这么一块业务 1、 脚本同步 这一环&#xff0c;是运维同事通过脚本实现的&#xff0c;所以我没去关注 2、 读取文件并上传 这一环&#xff0c;是我实现的&#xff0c;稳定运行了很长一段时间了&#xff0c;一直没出问题 中文乱码** 直到有一天&#xff0…

Typora + AliyunOSS + PicGo + OneDrive 搭建同步笔记本

文章目录 Typora AliyunOSS PicGo OneDrive 搭建同步笔记本1. 购置阿里云OSS资源2. 配置PicGo3. Typora oneDrive4. 注意 Typora AliyunOSS PicGo OneDrive 搭建同步笔记本 前记: 尝试使用Gitee和Github&#xff0c;效果都十分不理想 Gitee&#xff1a; repository仓库…

什么开放式耳机好用?2024五大爆款机型安利!

​2024年耳机的大热门毫无疑问的是开放式耳机&#xff0c;开放式耳机有着更健康的听音表现和极佳的佩戴舒适度&#xff0c;开放式设计在享受音乐的同时还可以清楚地听到外界的声音&#xff0c;这有助于在户外活动时保持对周围环境的警觉&#xff0c;增加使用时的安全性。作为一…