hive中开窗函数row_number的使用

row_number()函数介绍

row_number()开窗函数的一种,和over()函数结合一起使用,可以实现对数据的分组和排序。

使用示例

现在有一张表,数据如下

+------+----------+-------+
| Year |  Region  | Sales |
+------+----------+-------+
| 2022 | East     | 100   |
| 2022 | West     | 150   |
| 2022 | East     | 200   |
| 2023 | West     | 120   |
| 2023 | West     | 180   |
| 2023 | East     | 250   |
+------+----------+-------+

现在,我们想为每个年份和地区计算销售额的行号,并按照销售额降序排列。我们可以使用ROW_NUMBER() OVER(PARTITION BY field1, field2 ORDER BY field3, field4)子句来实现:

SELECT Year, Region, Sales,ROW_NUMBER() OVER (PARTITION BY Year, Region ORDER BY Sales DESC) AS row_number
FROM sales;

查询结果为

+------+----------+-------+------------+
| Year |  Region  | Sales | row_number |
+------+----------+-------+------------+
| 2022 | East     | 200   | 1          |
| 2022 | East     | 100   | 2          |
| 2022 | West     | 150   | 1          |
| 2023 | East     | 250   | 1          |
| 2023 | West     | 180   | 1          |
| 2023 | West     | 120   | 2          |
+------+----------+-------+------------+

在查询结果中,row_number列包含了每个年份和地区组合中销售额的行号。注意,PARTITION BY子句将结果分为不同的分区,每个分区内的行号是独立计算的。ORDER BY子句指定了按销售额降序排列的顺序。

通过使用PARTITION BY和ORDER BY子句,我们可以在Hive中对查询结果进行分区和排序,并为每个分区生成唯一的行号。这对于进行分组排名和分区分析等任务非常有用。

如果over中没有partition by和order by,会发生什么?

SELECT Year, Region, Sales,ROW_NUMBER() OVER () AS row_number
FROM sales;

查询结果为

+------+----------+-------+------------+
| Year |  Region  | Sales | row_number |
+------+----------+-------+------------+
| 2022 | East     | 200   | 1          |
| 2022 | East     | 100   | 2          |
| 2022 | West     | 150   | 3          |
| 2023 | East     | 250   | 4          |
| 2023 | West     | 180   | 5          |
| 2023 | West     | 120   | 6          |
+------+----------+-------+------------+

会为每一行数据生成一个唯一的行号,可以把这当成id,可以用作后续对数据进行id识别。

注意事项

当row_number中order by的排序的字段,存储的是时间,比如’2024-05-05 13:20:46’,但是类型却是字符串时,要防止下面这两种数据

-- 当前字段为sn, date_time
'sn1', '2024-1-3 00:00:00'
'sn1', '2024-1-21 00:00:00'

上面这两个数据在下面的排序中,会出现错误
select sn, date_time, row_number() over (partition by sn order by date_time asc) as row_number;

'sn1', '2024-1-21 00:00:00', 1
'sn1', '2024-1-3 00:00:00', 2

本来’2024-1-3 00:00:00’的row_number应该为1,因为1月3号应该在1月21号前面,但是因为这种格式的字符串,导致了1月3号一行的row_number值变成了2。

应该怎么解决这种问题呢?有两种方法

  • 将日期时间字符串,使用函数,统一转换成’yyyy-MM-dd HH:mm:ss’,可以参考下面的文章
    hive将时间字符串转换为timestamp的几种写法
  • 将所有日期时间字符串统一转换成bigint类型,再进行比较,可以参考下面的文章
    hive将时间字符串转换为timestamp的几种写法

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

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

相关文章

5月8日爬楼梯+使用最小花费爬楼梯

70.爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示…

EVENT事件调度(应用层级)操作注意事项

文章目录 简要注意事项API说明1、1毫秒计时驱动2、1秒计时驱动2、设置一个单位时间为1毫秒的周期性事件3、设置一个单位时间为1秒的周期性事件4、单次触发事件5、清除停止事件5、缓存事件触发标志6、获取事件状态 示例源码 简要 最大支持32个事件标志管理,倒计时精度…

java Io流学习归纳

- 固定套路:1. 创建IO流对象 2. 读写文件 3. 关闭流 - 固定的API方法: //读:read(): /*读一个字节/字符*/int read() /*读一个字节/字符数组*/ int read(byte[] buf)int read(char[] cbuf) //写:wri…

【数字经济】上市公司供应链数字化数据(2000-2022)

数据来源: 时间跨度:2000-2022年 数据范围:各上市企业 数据指标: 样例数据: 参考文献:[1]刘海建,胡化广,张树山,等.供应链数字化的绿色创新效应[J].财经研究,2023,49(03):4-18. 下载链接:https:…

Linux(openEuler、CentOS8)基于chrony企业内网NTP服务器搭建实验

一、知识点 chrony 是由 守护进程 chronyd 以及 命令行工具 chronyc 组成的 chronyd 在后台静默运行并通过 123 端口与时间服务器定时同步时间,默认的配置文件是 /etc/chrony.conf chronyc 通过 323 端口与 chronyd 交互,可监控 chronyd 的性能并在运…

基于springboot+vue+Mysql的口腔管理平台

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

【3dmax笔记】026:挤出和壳修改器的使用

文章目录 一、修改器二、挤出三、壳 一、修改器 3ds Max中的修改器是一种强大的工具,用于创建和修改复杂的几何形状。这些修改器可以改变对象的形状、大小、方向和位置,以生成所需的效果。以下是一些常见的3ds Max修改器及其功能: 挤出修改…

Day22 代码随想录打卡|字符串篇---实现 strStr()

题目(leecode T28): 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1…

第 8 章 电机测速(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.3.3 电机测速01_理论 测速实现是调速实现的前提,本节主要介绍AB相增量式编码器测速原理。 1.概…

可视化面板布局适配屏幕-基于 flexible.js + rem 智能大屏适配

可视化面板布局适配屏幕-基于 flexible.js rem 智能大屏适配 VScode 安装cssrem插件引入flexible.js在之后的开发都使用rem为单位,安装cssrem插件就是为了快捷将px转为rem我们的设计稿是1920px,设置最小宽度为1024px,最后,我们可…

管理非结构化数据

据IDC调查,当前企业80%的数据为非结构化数据或半结构化数据,而结构化数据是他们管理的重点,数据的大头-非结构化数据却被忽视。然而,非结构化数据也有着它的价值。 管理好非结构化数据对于公司释放有价值资产、高效决策和高效部署…

nodejs之log4js日志管理

log4js官网 npm i log4jsconst log4js require("log4js"); const path require("path"); Object.defineProperties; log4js.configure({appenders: {aaa: {type: "dateFile", //设置为这种类型,日志文件会分割filename: path.reso…

数据安全全场景覆盖

随着万物互联时代的到来,海量物联网设备产生的庞大数据逐渐超出云端服务器的处理能力,同时算力向边缘侧不断迁移,边缘计算逐渐成为云计算的重要延伸和补充。根据《中国边缘计算服务器市场报告》、《中国边缘云计算行业展望报告》等预测&#…

rdflib命名空间的问题

yaga Namespace("https://yago-knowledge.org/resource/") a yaga.Apple b yaga[Appel]这两者的区别,yaga[Appel]这里的Apple是变量,而yaga.Apple生成的实体就是“https://yago-knowledge.org/resource/Apple”

县供电公司员工向媒体投稿发文章用亲身经历告诉你并不难

在县供电公司的日子里,我肩负着一项至关重要的使命——信息宣传工作。这不仅仅是一份职责,更是连接公司与外界的桥梁,通过新闻稿件传递我们的声音,展示我们的成果。然而,回忆起刚刚踏入这个领域的时光,那段经历至今让我感慨万千。 初涉投稿,步履维艰 刚接手这项工作时,我的投稿…

又发现一个ai生成音乐的网站-heymusic

网址 https://heymusic.ai/ 尴尬,不挂梯子能登录进来,但是谷歌账号注册不了,刷新了几遍也没注册上。 看了下价格,应该不是免费的,所以也没了试用的兴趣。 我也不想用别的邮箱注册了,所以只能简单的水一…

Spring Boot应用部署 - Tomcat/Jetty/Undertow容器对比和使用场景

在前面的文章中,我们介绍了如何替换Tomcat容器,现总结下Tomcat/Jetty/Undertow容器。 那在Spring Boot应用部署中,常见的三种Web容器是Tomcat、Jetty和Undertow,它们各有特点,适用于不同的应用场景: Tomc…

频谱分析:深入解析与全面介绍

频谱分析 一、引言 频谱分析,作为一种广泛应用于信号处理和波谱分析的方法,其在现代科技领域的重要性不言而喻。从基础的物理现象到复杂的通信系统,频谱分析都扮演着至关重要的角色。本文将对频谱分析进行深入的解析和全面的介绍&#xff0…

速盾的具体防御能力如何?

速盾是一家专注于网络安全领域的技术公司,致力于为企业提供全方位的网络安全防护服务。其具体防御能力主要体现在以下几个方面: DDoS防御:速盾采用智能化的DDoS防护系统,能够及时识别和拦截各类DDoS攻击流量,确保企业网…

A*算法求最短路

Problem: 无链接 文章目录 思路解题方法复杂度Code 思路 这是一个经典的A寻路算法问题。A算法是一种启发式搜索算法,题解结合了最佳优先搜索和Dijkstra算法的优点,能够在寻找最短路径的过程中避免大量的无谓搜索,提高了效率。 在这个问题中&a…