hive所有窗口函数详情总结
hive窗口函数详情总结
- 解释
- 语法
- hive开窗函数
- 排序开窗函数
- 样例数据
- RANK()
- DENSE_RANK()
- ROW_NUMBER()
- 分析开窗函数
- 样例数据:
- last_value
- first_value
- lag
- lead
- 其他窗口函数
- cume_dist
- percent_rank
解释
开窗函数用于为行定义一个窗口(指运算将要操作的行的集合),它对一组值进行操作,不需要使用 Group By 子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
语法
函数() over(partition by 列名1 order by 列名2 rows between [[unbounded|num] preceding | current row]and [[unbounded|num] following | current row]) rows between:作用为划分表中窗口边界
unbounded preceding:表示表中窗口无上边界
num preceding:表示表中窗口上界到距离当前行向上num行
current row:表示当前行
num following:表示表中窗口下界到距离当前行向下num行
unbounded following:表示表中窗口无下边界
rows between unbounded preceding and unbounded following:
hive开窗函数
排序开窗函数
样例数据
select * from test ;
>name score subjectA 90 语文A 90 数学A 98 英语B 93 语文B 90 数学B 94 英语
RANK()
在计算排序时,若存在相同位次,会跳过之后的位次。有3条排在第1位时,排序为:1,1,1,4······
示例:
#按姓名分组,排序每个人的分数从低到高
select name , score , subject ,rank()over(partition by name order by score ) rk from test;
>name score subject rk
> A 90 语文 1
> A 90 数学 1
> A 98 英语 3
> B 90 数学 1
> B 93 语文 2
> B 94 英语 3
DENSE_RANK()
在计算排序时,若存在相同位次,不会跳过之后的位次。有3条排在第1位时,排序为:1,1,1,2······
示例:
#按姓名分组,排序每个人的分数从低到高
select name , score , subject ,rank()over(partition by name order by score ) rk from test;
>name score subject rk
> A 90 语文 1
> A 90 数学 1
> A 98 英语 2
> B 90 数学 1
> B 93 语文 2
> B 94 英语 3
ROW_NUMBER()
这个函数赋予唯一的连续位次。例如,有3条排在第1位时,排序为:1,2,3,4······
示例:
#按姓名分组,排序每个人的分数从低到高
select name , score , subject ,rank()over(partition by name order by score ) rk from test;
>name score subject rk
> A 90 语文 1
> A 90 数学 2
> A 98 英语 3
> B 90 数学 1
> B 93 语文 2
> B 94 英语 3
分析开窗函数
样例数据:
select * from test;RN ADDRESS ARRIVAL_TIME USERID ------ ---------- ------------------- --------- 1 A1 2012-7-9 下午12:03:21 1 (null) A2 2012-7-9 下午12:04:21 2 (null) A3 2012-7-9 下午12:05:21 3 2 A1 2012-7-9 下午12:08:21 4 (null) A2 2012-7-9 下午12:09:21 5 (null) A3 2012-7-9 下午12:10:21 6 3 A1 2012-7-9 下午12:13:21 7 (null) A3 2012-7-9 下午12:15:21 8 4 A1 2012-7-9 下午12:18:23 9 5 A1 2012-7-9 下午12:19:21 10 (null) A2 2012-7-9 下午12:20:21 11 (null) A3 2012-7-9 下午12:21:21 12 6 A1 2012-7-9 下午12:23:23 13 (null) A2 2012-7-9 下午12:24:21 14
last_value
取开窗最后一个值
第一个参数是列名,第二个参数可选布尔值,默认值为FALSE,true可以忽略null值
select rn,address,arrival_time,userid,last_value(rn,true) over(order by userid) group_t from test查询结果如下:RN ADDRESS ARRIVAL_TIME USERID GROUP_T ------ ---------- ------------------- --------- ---------- 1 A1 2012-7-9 下午12:03:21 1 1 (null) A2 2012-7-9 下午12:04:21 2 1 (null) A3 2012-7-9 下午12:05:21 3 1 2 A1 2012-7-9 下午12:08:21 4 2 (null) A2 2012-7-9 下午12:09:21 5 2 (null) A3 2012-7-9 下午12:10:21 6 2 3 A1 2012-7-9 下午12:13:21 7 3 (null) A3 2012-7-9 下午12:15:21 8 3 4 A1 2012-7-9 下午12:18:23 9 4 5 A1 2012-7-9 下午12:19:21 10 5 (null) A2 2012-7-9 下午12:20:21 11 5 (null) A3 2012-7-9 下午12:21:21 12 5 6 A1 2012-7-9 下午12:23:23 13 6 (null) A2 2012-7-9 下午12:24:21 14 6
first_value
取开窗第一个值
第一个参数是列名,第二个参数可选布尔值,默认值为FALSE,true可以忽略null值
select rn,address,arrival_time,userid,first_value(rn,true) over(order by userid) group_t from test查询结果如下:RN ADDRESS ARRIVAL_TIME USERID GROUP_T ------ ---------- ------------------- --------- ---------- 1 A1 2012-7-9 下午12:03:21 1 1 (null) A2 2012-7-9 下午12:04:21 2 1 (null) A3 2012-7-9 下午12:05:21 3 1 2 A1 2012-7-9 下午12:08:21 4 1 (null) A2 2012-7-9 下午12:09:21 5 1 (null) A3 2012-7-9 下午12:10:21 6 1 3 A1 2012-7-9 下午12:13:21 7 1 (null) A3 2012-7-9 下午12:15:21 8 1 4 A1 2012-7-9 下午12:18:23 9 1 5 A1 2012-7-9 下午12:19:21 10 1 (null) A2 2012-7-9 下午12:20:21 11 1 (null) A3 2012-7-9 下午12:21:21 12 1 6 A1 2012-7-9 下午12:23:23 13 1 (null) A2 2012-7-9 下午12:24:21 14 1
lag
LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 ,第三个参数指的是往上n个weinull的默认值,不是指开窗那列的值为null的默认值,示例:
select rn,address,arrival_time,userid,lag(rn,2,0) over(order by userid) group_t from test查询结果如下:RN ADDRESS ARRIVAL_TIME USERID GROUP_T ------ ---------- ------------------- --------- ---------- 1 A1 2012-7-9 下午12:03:21 1 0 (null) A2 2012-7-9 下午12:04:21 2 0 (null) A3 2012-7-9 下午12:05:21 3 1 2 A1 2012-7-9 下午12:08:21 4 null (null) A2 2012-7-9 下午12:09:21 5 null (null) A3 2012-7-9 下午12:10:21 6 2 3 A1 2012-7-9 下午12:13:21 7 null (null) A3 2012-7-9 下午12:15:21 8 null 4 A1 2012-7-9 下午12:18:23 9 3 5 A1 2012-7-9 下午12:19:21 10 null (null) A2 2012-7-9 下午12:20:21 11 4(null) A3 2012-7-9 下午12:21:21 12 5 6 A1 2012-7-9 下午12:23:23 13 null (null) A2 2012-7-9 下午12:24:21 14 null
lead
LEAD(col,n,DEFAULT)用于统计窗口内往下第n行值
select rn,address,arrival_time,userid,lead(rn,2,0) over(order by userid) group_t from test
查询结果如下:RN ADDRESS ARRIVAL_TIME USERID GROUP_T ------ ---------- ------------------- --------- ---------- 1 A1 2012-7-9 下午12:03:21 1 null (null) A2 2012-7-9 下午12:04:21 2 2 (null) A3 2012-7-9 下午12:05:21 3 null 2 A1 2012-7-9 下午12:08:21 4 null (null) A2 2012-7-9 下午12:09:21 5 3(null) A3 2012-7-9 下午12:10:21 6 null 3 A1 2012-7-9 下午12:13:21 7 4(null) A3 2012-7-9 下午12:15:21 8 54 A1 2012-7-9 下午12:18:23 9 null 5 A1 2012-7-9 下午12:19:21 10 null (null) A2 2012-7-9 下午12:20:21 11 6(null) A3 2012-7-9 下午12:21:21 12 null 6 A1 2012-7-9 下午12:23:23 13 0(null) A2 2012-7-9 下午12:24:21 14 0
其他窗口函数
cume_dist
这个函数不太常用, 小于等于当前值的行数/分组内总行数
select r, a ,cume_dist() over( order by a ) col from (
select 'cc' r, 1 a union all select 'aa',2 union all select 'bb', 3
) tr a col
>c 1 0.3333333333333333 #1/3
>aa 2 0.6666666666666666 #2/3
>b 3 1 #3/3
percent_rank
percent_rank :窗口内当前行的RANK值-1/窗口内总行数-1(这里的rank值就是指的是rank 函数的的返回值)
select r, a ,percent_rank() over( order by a ) col from (
select 'cc' r, 1 a union all select 'aa',2 union all select 'bb', 3
) tr a col
>c 1 0 #1-1/3-1
>aa 2 5 #2-1/3-1
>b 3 1 #3-3/3-1
相关文章:
hive所有窗口函数详情总结
hive窗口函数详情总结 解释语法hive开窗函数排序开窗函数样例数据RANK()DENSE_RANK()ROW_NUMBER() 分析开窗函数样例数据:last_valuefirst_valuelaglead 其他窗口函数cume_distpercent_rank 解释 开窗函数用于为行定义一个窗口(指运算将要操作的行的集合…...

Talk | 新加坡国立大学博士生施宇钧:DragDiffusion-基于扩散模型的关键点拖拽图片编辑
本期为TechBeat人工智能社区第518期线上Talk! 北京时间8月2日(周三)20:00, 新加坡国立大学博士生—施宇钧的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “DragDiffusion-基于扩散模型的关键点拖拽图片编辑”,他…...
22 | 贝叶斯分类算法
文章目录 介绍什么是贝叶斯分类算法?贝叶斯分类算法的应用场景贝叶斯定理贝叶斯定理的基本原理贝叶斯定理的公式推导贝叶斯定理的应用举例代码介绍 什么是贝叶斯分类算法? 贝叶斯分类算法是一类基于贝叶斯定理的分类技术。在统计分类任务中,这些算法使用特定的假设来建立特…...
java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效
问题: 在Select里采用Contact(%,#name,%)报错参数个数无效 原因: 回想以前用Mysql的时候就是这样用的,没有问题,在这里就出问题了,所以确定问题在oracle数据库上,经过查询得知,oracle和mysql…...
数据结构8-哈希表
数据结构8-哈希表 动态分配内存方式: #include <stdio.h> #include <stdlib.h>#define SIZE 20struct DataItem {int data; int key; };struct DataItem* hashArray[SIZE]; struct DataItem* dummyItem; struct DataItem* item;//获取键值 int has…...

vue3引用Font-Awesome字体图标库
环境:vue3tsviteelement plus 介绍:这里安装引用的是Font-Awesome 6.x 版本,有专业版(付费),这里只介绍免费版字体使用方法 一、安装 1.使用npm安装,终端打开项目目录或者命令行cd到目录文件夹…...
Python: Django 服务部署可能遇到的一些问题
502 bad gateway 不要用 python3 manage.py runserver 启动服务, 而要用: daphne -b 0.0.0.0 -p <端口> <工程名>.asgi:application此外,在 setting.py 中,修改: import osSECRET_KEY os.environ.get(D…...

Python爬虫时遇到连接超时解决方案
在进行Python爬虫任务时,经常会遇到连接超时(TimeoutError)错误。连接超时意味着爬虫无法在规定的时间内建立与目标服务器的连接,导致请求失败。为了帮助您解决这个常见的问题,本文将提供一些解决办法,并提…...

这所国字头双一流,根本招不满,学硕都没人报!
一、学校及专业介绍 中国民航大学,位于天津市,是民航局、天津市、教育部共建高校,是天津市“双一流”建设高校和高水平特色大学建设高校。 1.1 招生情况 2023年中国民航大学电子信息与自动化学院,初试考806信号与系统的一共有两…...
macos 查询端口占用 命令
在 macOS 上查询端口占用的命令是通过使用lsof(list open files)工具来实现的。 lsof可以显示当前系统中打开的文件(包括网络连接和端口)的相关信息。 打开终端应用程序(Terminal),然后输入以下…...

无代码开发:打破传统开发模式,引领数字化转型新方向
随着数字化转型的加速,企业对于高效、便捷的软件开发需求愈发旺盛。无代码开发作为一种新兴的软件开发模式,以其可视化、模块化的开发方式,为数字化转型提供了新的方向。本文将从无代码开发的优势、应用场景、如何实现等方面进行详细解读&…...

go-zero超强工具goctl的常用命令api,rpc,model及其构建的服务解析
goctl api 详情移步: go-zero的路由机制解析 基于go-zero的api服务刨析并对比与gin的区别 goctl rpc goctl支持多种rpc,较为流行的是google开源的grpc,这里主要介绍goctl rpc protoc的代码生成与使用。 protoc是grpc的命令,作用…...

手机python编程软件怎么用,手机python编程软件下载
大家好,小编来为大家解答以下问题,手机python编程软件保存的代码在哪里,手机python编程软件怎么运行,现在让我们一起来看看吧! 原标题:盘点几个在手机上可以用来学习编程的软件 前天在悟空问答的时候&#…...

【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

家居行业解决方案 | 君子签电子签约助力家居企业减负增效
过去,家居行业因供需两端碎片化、服务链条较长等因素,导致线上发展较为缓慢,近年来,互联网的发展推动直播电商、兴趣电商兴起,促使家居行业数字化建设需求越来越为迫切。 合同管理作为家居行业企业经营的一项重要管理…...

Nodejs 第五章(Npm run 原理)
npm run xxx 发生了什么 按照下面的例子npm run dev 举例过程中发生了什么 读取package json 的scripts 对应的脚本命令(dev:vite),vite是个可执行脚本,他的查找规则是: 先从当前项目的node_modules/.bin去查找可执行命令vite如果没找到就去全局的node…...
150. 逆波兰表达式求值
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。 每个操作数(运算对象)都可以是一个整数或者另一个表达式。 两个…...

js中的设计模式
设计模式 代码整体的结构会更加清楚,管理起来会更加方便,更好地维护 设计模式是一种思想 发布订阅 模块化开发 导入很多模块 容器即数组存储未来要执行的方法,同addEventListener 数组塌陷问题* 由于删除了元素,导致从删除元素的位…...
PostgreSQL:string_agg 多列值聚合成一列
PostgreSQL:string_agg 多列值聚合成一列 string_agg是PostgreSQL中的一个聚合函数,用于将一组值连接为一个字符串。它接受两个参数:要连接的值和连接符。 语法如下: string_agg(expression, delimiter)其中,expression是要连接…...

通向架构师的道路之apache_tomcat_https应用
一、总结前一天的学习 通过上一章我们知道、了解并掌握了Web Server结合App Server是怎么样的一种架构,并且亲手通过Apache的Http Server与Tomcat6进行了整合的实验。 这样的架构的好处在于: 减轻App Server端的压力,用Web Server来分压…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...