Hive的窗口函数

定义:
聚合函数是针对定义的行集()执行聚集,每组只返回一个值.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.hqwc.cn/news/707023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业派-配置Intel神经计算棒二代(NCS2)

最近两天在工业派ubuntu16.04上配置了Intel神经计算棒二代——Intel Neural Compute Stick,配置过程之艰辛我都不想说了,实在是太折磨人。不过历尽千辛万苦,总算让计算棒可以在工业派ubuntu16.04系统上跑了,还是蛮欣慰的。 注&…

究极完整版!!Centos6.9安装最适配的python和yum,附带教大家如何写Centos6.9的yum.repos.d配置文件。亲测可行!

前言! 这里我真是要被Centos6.9给坑惨了,最刚开始学习linux的时候并没有在意那么的,没有考虑到选版本问题,直到23年下半年,官方不维护Centos6.9了,基本上当时配置的文件和安装的依赖都用不了了&#xff0c…

干式蒸发器、满液式蒸发器以及降膜式蒸发器的介绍

干式蒸发器 1、干式蒸发器原理、定义 干式蒸发器制冷剂在换热管内通过,冷水在高效换热管外运行,这样的换热器换热效率相对较低,其换热系数仅为光管换热系数的2倍左右,但是其优点是便于回油,控制较为简便,…

零知识证明:哈希函数-Poseidon2代码解析与benchmark

1、哈希函数(Hash Function)与Poseidon 在密码学中,哈希函数是一种将任意大小的数据映射到固定大小的输出的函数。哈希函数的输出称为哈希值或哈希码。哈希函数具有单向性和抗碰撞性。一些常见的哈希函数包括 MD5、SHA-1、SHA-256 和 SHA-3。例如,假设您要验证一个文件的完整…

四川易点慧电商抖音小店运营秘籍引领电商新潮流

在当今数字化浪潮中,抖音小店作为电商领域的一匹黑马,以其独特的社交属性和庞大的用户基础,正迅速崛起为新的销售增长点。四川易点慧电子商务有限公司,作为电商行业的佼佼者,深谙抖音小店运营的精髓,专业助…

基于vs和C#的WPF应用之动画4---跳跳球

一、画布和图形 <Canvas x:Name"canvas4" Grid.Row"1" Grid.Column"1" Width"200" Height"200"><Canvas.Triggers><EventTrigger RoutedEvent"Loaded"><BeginStoryboard Storyboard"…

Hotcoin Research|玩赚WEB3:探索Apeiron:颠覆传统的区块链游戏,融合神话与现代玩法

1. 游戏概述 1.1 游戏类型与主题 Apeiron 是一款结合了上帝模拟、Roguelike、动作角色扮演&#xff08;ARPG&#xff09;和卡牌游戏元素的区块链游戏。这款游戏以独特的方式融合了多种游戏类型&#xff0c;提供了一个丰富多彩的神话宇宙&#xff0c;每个星系都受到不同现实世…

纯血鸿蒙APP实战开发——Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作&#xff0c;解压成功后将解压路径返回主线程&#xff0c;获取解压文件列表。 效果图预览 使用说明 点击解压按钮&#xff0c;解压test.zip文件&#xff0c;显…

Nebula街机模拟器 Mac移植版(400+游戏roms)汉化版

nebula星云模拟器是电脑上最热门的街机游戏模拟器之一&#xff0c;玩家可以通过这个小巧的模拟器软件进行多款经典街机游戏启动和畅玩&#xff0c;本次移植的包含400多款游戏roms&#xff0c;经典的三国志、三国战纪、拳皇、街霸、合金弹头、1941都包含在内。 下载地址&#xf…

数字孪生之数据采集

一、数据采集的定义和作用 在数字孪生中&#xff0c;采集是指从现实世界中收集数据并将其传输到数字孪生系统中的过程。采集的目的是为了获取现实世界中的实时数据&#xff0c;以便在数字孪生系统中进行分析、模拟和预测。 采集的作用主要有以下几个方面&#xff1a; 数据同步…

一个强大的在线解析网站,无需登录,只用把视频链接粘贴进去就能免费解析下载视频。

TiQu.cc是什么&#xff1f; TiQu.cc是一个强大的在线工具&#xff0c;让用户可以从包括Facebook、VK、Twitter、Tiktok、Instagram等在内的100多个平台下载他们喜爱的视频。不论是音乐、电视节目、电影、短片还是个人上传的内容&#xff0c;TiQu.cc都可以帮助您随时随地以离线…

诸葛智能携手五大银行,以数据驱动的营销中台带来可预见增长

对于银行来说&#xff0c;客户是赖以生存的基础&#xff0c;也是保持活力的关键。尤其是大数据、人工智能等新兴技术的推动下&#xff0c;通过数据赋能产品升级和服务创新&#xff0c;深挖客户潜能&#xff0c;更是助推银行快步迈入高质量发展的新阶段。 在银行加速拥抱新质生…