图解HIVE开窗函数(Windowing functions小白进)

Hive中collect_list()排序问题详解 来看一道互联网公司的面试题: 有个用户好友表:字段如下 uid fans_uid score 返回:uid, fans_uid_list【fans_uid的拼接串,按照score降序拼接】 给出数据源:每个uid,有很多对应的fans_uid,每个fans_uid 都对应一个score,我们需要按uid分组,将fans_uid 的score按降序排序,将fans_uid 放在一个列表中,做好友推荐 create temporary table tb_user_fans as select 阅读详情

1、概述

  • 原名:Windowing functions
  • 译名:开窗函数
  • 应用场景举例:移动平均线……

图解开窗

2、相关函数

函数名🔉直译语法说明
overˈoʊvərprep. 在……期间OVER ()开窗必备
precedingprɪˈsiːdɪŋadj. 前述的;
v. 在…之前(precede+ing)
2 PRECEDING当前行的前2行
followingˈfɒləʊɪŋadj. 接着的;
prep. 在(某事)以后
3 FOLLOWING当前行的后3行
unboundedʌnˈbaʊndɪd无限的UNBOUNDED PRECEDING起点
(替代了数字的位置)

3、示例数据

--删库
DROP DATABASE IF EXISTS trade CASCADE;
--建库
CREATE DATABASE trade LOCATION '/trade';
USE trade;
--建表
CREATE TABLE sales
(
    ymd  STRING COMMENT "日期",
    name STRING COMMENT "顾客",
    sale INT COMMENT "消费"
) COMMENT "日期用户销量汇总表"
    LOCATION '/trade/sales';
--插数据
INSERT INTO TABLE sales
VALUES ('2020-01-01', '剑圣', 10),
       ('2020-01-02', '守望者', 15),
       ('2020-01-04', '守望者', 29),
       ('2020-01-05', '剑圣', 46),
       ('2020-01-07', '守望者', 50),
       ('2020-01-08', '先知', 62),
       ('2020-01-08', '剑圣', 55),
       ('2020-02-03', '巫妖', 23),
       ('2020-03-10', '剑圣', 12),
       ('2020-03-10', '巫妖', 12),
       ('2020-04-05', '先知', 42),
       ('2020-04-06', '先知', 42),
       ('2020-04-09', '剑圣', 13),
       ('2020-04-09', '守望者', 68);
--查看
SELECT name,collect_list(sale) FROM sales GROUP BY name;

4、collect_list:把多行数据合并成列表

SELECT name,collect_list(sale),collect_list(ymd) FROM sales GROUP BY name;

collect_list

5、over:滑窗函数

5.1、不分区的窗口就是全部数据

SELECT name,collect_list(sale) OVER() FROM sales;

over

5.2、窗口+分区

SELECT name,sale,collect_list(sale) OVER(PARTITION BY name) FROM sales;

over+partition

5.3、窗口+分区+分区内排序

SELECT name,sale,collect_list(sale) OVER(PARTITION BY name ORDER BY sale) FROM sales;

over+partition+order

5.4、窗口+分区+分区内排序+窗口范围

5.4.1、默认窗口范围:首行~当前行

5.4.2、指定滑窗范围

over+partition+order+rows between+preceding+following

6、滑窗配合其它函数

6.1、滑窗+排序排名

SELECT
    name,
    sale,
    RANK() OVER (PARTITION BY name ORDER BY sale DESC)
FROM sales;

rank

6.2、滑窗+统计

SELECT
    name,
    sale,
    COLLECT_LIST(sale) OVER (
        PARTITION BY name ORDER BY sale
        ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),
    COUNT(sale) OVER (
        PARTITION BY name ORDER BY sale
        ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),
    SUM(sale) OVER (
        PARTITION BY name ORDER BY sale
        ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
FROM sales;

count、sum

6.3、拉链

函数名🔉直译
laglæɡn. 落后;迟延;vi. 滞后;adj. 最后的
leadliːdvt. 领导;n. 领导;导线;vi. 导致
SELECT
    name,
    LAG(ymd,1,'1900-01-01') OVER (PARTITION BY name ORDER BY ymd),
    ymd,
    LEAD(ymd,1,'2099-12-31') OVER (PARTITION BY name ORDER BY ymd)
FROM sales;

lag、lead

7、range和rows的区别

SELECT
    name,
    sale,
    RANK() OVER (PARTITION BY name ORDER BY sale) AS r_rank,
    COLLECT_LIST(sale) OVER (
        PARTITION BY name ORDER BY sale
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS c_rows,
    COLLECT_LIST(sale) OVER (
        PARTITION BY name ORDER BY sale
        RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS c_range
FROM sales;

结果如下,留意黄色部分

namesaler_rankc_rowsc_range
剑圣101[10][10]
剑圣122[10,12][10,12]
剑圣133[10,12,13][10,12,13]
剑圣464[10,12,13,46][10,12,13,46]
剑圣555[10,12,13,46,55][10,12,13,46,55]
先知421[42][42,42]
先知421[42,42][42,42]
先知623[42,42,62][42,42,62]
巫妖121[12][12]
巫妖232[12,23][12,23]
守望者151[15][15]
守望者292[15,29][15,29]
守望者503[15,29,50][15,29,50]
守望者684[15,29,50,68][15,29,50,68]

8、应用场景

https://yellow520.blog.youkuaiyun.com/article/details/119835292

Spark处理大数据的常用函数(开窗函数) spark数据开窗函数、rank、row_number、dense_rank排序函数、lead、lag、取指定行某一字段值、分区范围、开窗方法 阅读详情

相关推荐

SQL进阶技巧:如何保证collect_list()函数有序性?【有序数据合并问题】

collect_list()函数是hive中非常重要的函数,他是一种聚合函数,他可以将多行数据合并成一行数据,可以将某列的值聚合成一个list,我们通常说的数据合并就是利用该函数实现的。但是该函数在使用时候不能保证合并的顺序性,包括在hive官网中也给出了说法,由于shuffe的影响并不能保证结果的顺序性,在日常的实践中我们往往需要的输出结果是要有序的,那么如何利用该函数保证输出结果的有序性呢?本文针对这一问题进行探究,并给出了完整的解决方案。

石榴姐yyds 2368

HIVE函数汇总--开窗函数篇

详细介绍开窗函数的思路及其用法

小猿天地 1万+

2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导

将(1)式代入(6)式,就有。

wmorries的博客 480

hive的开窗函数篇

hive的开窗函数over()

qq_40202995的博客 1万+

Pspice安装教程:Windows系统完整指南(含环境变量设置)

详细讲解在Windows系统中完成Pspice安装的全过程,涵盖安装步骤与关键的环境变量设置,帮助用户顺利运行仿真工具。适合初学者快速上手pspice安装教程中的核心环节。

weixin_42230607的博客 1180

S7-1200PLC期末复习题(第七章)

A.0 B.1 C.4 D.-4 A、CV = 0 B、CV = 1 C、CV < 4 D、CV >= 4A、0,0 B、3,0 C、1,1 D、3,1 A、0 B、1 C、先是1,再变为0 D、先是0,再变为1置位输出:常开触点M0.0闭合,Q0.0变为1状态并保存该状态,即使M0.0断开,Q0.0也保持1状态。 复位输出:常开触点M0.1闭合时,Q0.0变为0状态并保持该状态,即使M0.1断开,Q0.0也保持为0状态。 A、1 B、0 C、5 D、10RESET_BF指令需要两个参数,第一个是复位的位数

qq_52251819的博客 4422

【Hive】窗口函数(开窗函数部分)

我们都知道在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数.目前,我用的多的就是 row_number() , sum(), 解决topN 问题,分区排序,累积计数。hive中的窗口函数和sql中的窗口函数相类似,都是用来做一些数据分析类的工作,一般用于OLAP分析(在线分析处理)。

康师傅没有眼泪 5844

containerd镜像加速配置全解析:从host.toml到config.toml的演进与实践

本文全面解析了containerd镜像加速的配置方法,重点对比了传统的config.toml集中式配置与现代的host.toml模块化配置的演进与优劣。文章通过实战演示,详细指导如何为docker.io、registry.k8s.io等常见仓库配置host.toml加速,并提供了生产环境下的最佳实践、故障排查与性能优化建议,帮助用户显著提升镜像拉取效率与系统稳定性。

jenkins8butler的博客 698

强化 Hive高阶函数

GROUPING SETS 示例:实现同一数据集的多重group by操作。事实上GROUPING SETS是多个GROUP BY进行UNION ALL操作的简单表达。 数据: +----------+----------+---+ |year_month|date |pv | +----------+----------+---+ |2015-04 |2015-04-12|10 | |2015-03 |2015-03-10|2 | |2015-03 |2015-03-10|9 |

yang灬仔 493

Codex 100个真实案例 - 用AI生成游戏场景地图(随机地形+建筑)

本案例使用 Codex 从零构建一个游戏场景地图生成器!我们会用 Perlin 噪声算法生成自然逼真的随机地形(山脉、平原、河流、海洋),实现瓦片地图渲染系统,智能放置建筑物和资源点,最终在浏览器中提供可缩放、可拖拽的交互式地图预览,并支持一键导出高清 PNG 图片。整个过程完全用自然语言驱动 Codex 完成!

yueyeguzhuo的专栏 159

FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地

一、环境介绍 操作系统介绍:ubuntu 18.04 FFMPEG版本: 4.4.2 摄像头: USB摄像头、虚拟机挂载本机自带摄像头 二、FFMPEG与X264下载编译 X264下载地址: http://www.videolan.org/developers/x264.html FFMPEG下载地址:https://ffmpeg.org/download.html Yasm ...

8876

Hive学习——开窗函数精讲

Hive中开窗函数十分重要,很多业务需求都可以用开窗函数解决

雷神乐乐的博客 3466

【23】OpenCV C++实战篇——张正友相机标定【相机标定原理、相机标定流程、标定结果评价、图像畸变矫正】

R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 4479

hive窗口函数总结

hive窗口函数细则

leopard0915的博客 3246

ISO21434 组织网络安全管理(二)

为了实现网络安全工程,该组织建立并维护网络安全治理和网络安全文化,包括网络安全意识管理、能力管理和持续改进。这涉及到指定针对本文档的目标进行独立审计的特定于组织的规则和过程。 为了支持网络安全工程,该组织实施了网络安全的管理系统,包括管理工具和应用质量管理系统。

qq_42357877的博客 1322

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Hive窗口函数(开窗函数)

一、相关函数说明 over():指定聚合函数工作的数据窗口的大小,这个数据窗口大小会随着行的变而变化。over跟在聚合函数后面,只对聚合函数生效。 current row:当前行 n preceding:往前n行数据 n following:往后n行数据 unbounded:起点:unbounded preceding 表示从前面的起点开始,unbounded following表示到后面的终点结束 lag(col,n):往前第n行数据 lead(col,n):往后第n行数据 ntile(n):把有

Markble 3928

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

hive的开窗函数

hive的开窗函数 开窗函数可用于组内数据分析排序。 开窗函数的语法 Function (arg1,..., argn) OVER ([PARTITION BY <...>] [ORDER BY <....>] [<window_expression>]) hive常用的开窗函数Function : -- 聚合开窗函数 count(); -- 窗口内总条数 sum(); -- 窗口内数据的和 min(); -- 窗口内最小值 max(); -- 窗口内最

Climber 6100

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Hive 的开窗函数有哪些?

开窗函数是一类特殊的 SQL 函数,它能够在查询结果的某个窗口内进行计算。与传统的聚合函数不同,开窗函数不会将结果集缩减到单一的行,而是保留所有行,同时在每一行上进行计算。开窗函数通常用于分析、排名及计算移动平均等场景。:开窗函数的名称。argument:函数的参数。:定义窗口的分区。ORDER BY:定义窗口内的排序。Hive 的开窗函数为数据分析提供了强大的功能,使得用户能够在不聚合数据的情况下对数据进行细致的分析。通过使用各种开窗函数(如RANK()SUM()LEAD()和LAG()

My_wife_QBL的博客 1500

Spark SQL自定义collect_list分组排序

2.使用struct和sort_array(array,asc?想要在spark sql中对group by + concat_ws()的字段进行排序,可以参考如下方法。这种方式在大数据量下性能会比较慢,所以尝试下面的操作。因为使用开窗函数本身会使用比较多的资源,

qq_40623672的博客 2219

OVER(PARTITION BY)函数介绍

简介   开窗函数,Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。 1、over函数的写法: over(partition by class order by sroce) 按照sroce排序进行累计,o...

ishulei的博客 403

【分析函数】一文遍识开窗函数

【数据库分析函数】一文遍识开窗函数

Axlsss的博客 1618

SQL:开窗函数(窗口函数)

4、 窗口函数 目录4、 窗口函数4.1 排序窗口函数rank4.2 rank(), dense_rank(), row_number()区别4.3 、排序截取数据lag(),lead(),ntile(),cume_dist()4.4 聚合函数作为窗口函数4.4、over(- - rows between and ) 简单理解,就是对查询的结果多出一列,这一列可以是聚合值,也可以是排序值。 开窗函数一般就是说的是over()函数,其窗口是由一个 OVER 子句 定义的多行记录 开窗函数一般分为两类,

忄凝^的博客 1万+

SQL进阶技巧:有序行转列问题如何保证不同字段内容有序性及内容一一对应?【collect_list函数有序性保证问题】

02。

qq_36078699的博客 714

hive 函数之二 窗口函数 与 分析函数

hive 函数之二 窗口函数 与 分析函数 ①排序函数 1. order by -- 全局排序 所有map端数据,只在一个reduce端进行,全局排序 2. sort by -- 对每一个reduce中进行局部排序 因此在使用sort by之前,需要先设置Reduce的数量>1(set mapreduce.job.reduces=n;)才会做局部排序 distribute by 是控制 map 的输出在reduer 中是如何划分的。

qq_36998916的博客 642

【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景

【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景

sodaloveer的博客 2万+

HIVE--hive的窗口函数(开窗函数,分析函数)

本文详细介绍了hive窗口函数,即包括开窗函数和分析函数两部分。

数据科学 爱好分享 快乐就完了 1万+
上一篇: 如何降低HIVE延时
下一篇: HIVE【WITH AS、子查询、视图】的区别
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值