`
superlxw1234
  • 浏览: 552260 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44537
社区版块
存档分类
最新评论

hive中使用标准sql实现分组内排序

    博客分类:
  • hive
阅读更多

在hive中,想要实现分组内排序,一般都是自己写udf实现oracle中分析函数row_number() over(partition)的功能,如果不使用自定义udf,仅使用标准sql实现的话,毫无性能可言,仅做实验而已。

 

方便起见,以下语句为oracle中语句,但都属于标准sql,在hive中亦可:

 

CREATE TABLE lxw_t (user_id VARCHAR2(20),
class VARCHAR2(20),
score NUMBER 
);

 

 

 

INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','语文','90');
INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','数学','86');
INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','英语','96');
INSERT INTO liuxiaowen.lxw_t VALUES ('user_1','体育','77');
INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','语文','88');
INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','数学','65');
INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','英语','67');
INSERT INTO liuxiaowen.lxw_t VALUES ('user_2','体育','98');


commit;

 

 

SELECT x.user_id,x.class,x.score,COUNT(1) AS seq 
FROM (
  SELECT a.*,b.score score2 FROM 
  liuxiaowen.lxw_t a ,
  liuxiaowen.lxw_t b 
  WHERE a.user_id = b.user_id (+) 
) x 
WHERE x.score2 >= x.score --按照成绩由高到低排列
--WHERE x.score >= x.score2  --按照成绩由低到高排列
GROUP BY x.user_id,x.class,x.score 
order BY 1,4 

 

按照成绩由高到低排列的结果如下:

 

USER_ID	CLASS	SCORE	SEQ
user_1	英语	96	1
user_1	语文	90	2
user_1	数学	86	3
user_1	体育	77	4
user_2	体育	98	1
user_2	语文	88	2
user_2	英语	67	3
user_2	数学	65	4

 

按照成绩由低到高排列的结果如下:

 

USER_ID	CLASS	SCORE	SEQ
user_1	体育	77	1
user_1	数学	86	2
user_1	语文	90	3
user_1	英语	96	4
user_2	数学	65	1
user_2	英语	67	2
user_2	语文	88	3
user_2	体育	98	4

 

0
4
分享到:
评论

相关推荐

    Hive SQL 编译过程详解

    本文将深入探讨Hive SQL如何被编译成MapReduce任务,以及在这个过程中涉及到的关键原理。 1. MapReduce实现基本SQL操作的原理: - **Join的实现原理**:在Hive中,Join操作通常通过MapReduce来实现。例如,在一个...

    hive搭建及使用入门简介(内含PPT、各种表创建sql及hive搭建使用笔记)

    “分桶”(Bucketing)是另一种优化手段,它将数据按特定列的值进行哈希排序并分组到不同的文件(桶)中。当进行JOIN操作时,如果两个表在JOIN键上使用了相同的分桶策略,Hive可以使用更高效的MapReduce算法,提升...

    HiveSQL解析原理.docx

    本文旨在深入探讨HiveSQL解析原理及其如何将SQL转化为MapReduce过程,并解释MapReduce如何实现基本SQL操作。 #### 二、MapReduce实现基本SQL操作的原理 在深入理解Hive如何将SQL语句转换为MapReduce任务之前,我们...

    Hive中分组取topN_row_number-rank和dense_rank的使用.pdf

    在这篇文档中,我们将详细学习在Hive中如何进行分组取topN,以及如何使用row_number()、rank()和dense_rank()三种窗口函数进行数据排序和排名。 首先,Hive中的数据表创建和数据插入操作是数据查询和分析的前提。...

    hive-testbench-hive14.zip大数据TPCDS-99SQL自动测试脚本

    TPCDS SQL查询的复杂性在于它们设计了多种数据仓库的典型操作,如聚合、联接、子查询、排序、分组等,这些都是大数据分析中常见的操作。通过执行这些SQL脚本,我们可以测试Hive在处理大数据量时的响应速度、资源消耗...

    HiveSQL优化手册

    ### HiveSQL优化手册 #### 数据倾斜优化 **数据倾斜**是指在执行Hive查询时,由于数据分布不均,导致一部分任务处理的数据量远大于其他任务的现象,这将严重影响整个查询的性能。针对数据倾斜问题,可以从以下几个...

    Hive SQL性能优化

    ### Hive SQL性能优化详解 #### 一、Hive SQL执行顺序及原理 了解Hive SQL的执行顺序,有助于我们写出更高效、更高质量的代码。Hive SQL的执行大致可以分为以下几个步骤: 1. **确定数据源**:首先确定查询的数据...

    Hive函数及语法说明

    这些函数可以在 Hive 的查询语句中使用,以便对数据进行处理和分析。 #### 数值函数 Hive 提供了多种数值函数,用于执行数学运算,例如: * round(double a):返回 double 类型的四舍五入的 BIGINT 值。 * round...

    hiveSQL实战案例

    在Hive SQL实战中,我们经常会遇到各种查询需求,这里我们将通过三个具体案例来探讨Hive SQL中的关键知识点,包括窗口函数的应用以及处理用户数据的技巧。 首先,我们来看窗⼝函数row_number(), rank()和dense_rank...

    Hive用户指南 Hive user guide 中文版

    而Client则是指Hive的Java客户端API,通过该API可以直接在应用程序中执行Hive SQL;WUI则提供了基于Web的用户界面,方便用户远程访问和管理Hive。 - **元数据存储**:Hive的元数据通常存储在关系型数据库中,如...

    hive官方翻译文档

    例如,可以使用`SELECT`语句从Hive表中提取数据,`JOIN`操作用于合并多个表的数据,`GROUP BY`和`HAVING`用于数据分组和过滤。 3. **元数据**:Hive MetaStore存储了关于Hive表的所有元数据,如表名、列名、分区...

    HiveSQL基础窗口函数学习笔记

    在大数据处理领域,HiveSQL是一种广泛使用的查询语言,它扩展了标准的SQL,以便在分布式存储系统上处理大规模数据集。本学习笔记主要聚焦于HiveSQL中的窗口函数,这是进行复杂数据分析的重要工具。 窗口函数允许...

    hive级联求和

    在这个查询中,我们使用了两个级别的级联求和:首先是按区域分组并按日期排序,计算出区域内的累计销售额(regional_sum);接着在同一区域内,再按城市分组并按日期排序,计算出城市内的累计销售额(citywise_sum)...

    Oracle PL-SQL 对应 hadoop hive 、 phoenix中常用的对应函

    Oracle PL-SQL 与 Hadoop Hive 和 Phoenix 是两种不同的数据处理和存储系统,它们各自拥有独特的函数库,但在数据操作中存在一些相似的功能。本文将详细介绍 Oracle PL-SQL 中的一些常见函数,以及它们在 Hadoop ...

    Oracle PL-SQL 对应 hadoop hive 、 phoenix中常用的对应函数

    - Oracle PL-SQL的`GROUP BY`和`ORDER BY`在Hive和Phoenix中同样存在,用于数据分组和排序。 8. **窗口函数**: - Oracle PL-SQL的窗口函数如`LEAD`、`LAG`、`RANK`在Hive中也有实现,但Phoenix不直接支持窗口...

    Hive SQL大厂必考常用窗口函数及面试题.pdf

    【Hive SQL大厂必考常用窗口函数及面试题】主要涵盖了窗⼝函数在大数据分析中的应用,尤其在OLAP(在线分析处理)场景中的重要性。窗⼝函数是一种标准SQL功能,它允许对数据库数据进行实时分析处理,如市场分析、...

    HIVE函数详解大全

    6. 分组和排序:`GROUP BY`, `ORDER BY`, `DISTRIBUTE BY`, `SORT BY`,用于数据分组和排序。 7. 时间和日期函数:`YEAR`, `MONTH`, `DAY`, `HOUR`, `MINUTE`, `SECOND`,用于提取日期和时间部分。 8. 模式匹配函数...

    Hive教程.pdf

    - 在大型数据集中实现全局排序通常需要额外的步骤,例如通过增加分区数量或使用特定的MapReduce设置。 #### 八、Hive内置函数 - **explode函数**: - 将数组或映射转换为行。 - **collect_set函数**: - 收集唯一...

Global site tag (gtag.js) - Google Analytics