`

hive row_number分组排序top

阅读更多

自从hive 0.11.0 开始,加入了类似orcle的分析函数,很强大,可以查询到分组排序top值

使用方法跟oracle没有差别

 

贴个小例子

查询的是同一个操作下pv前十的用户

select
*
,row_number() OVER(PARTITION BY t3.action ORDER BY pv desc) AS flag
from
(
select 
action
,uuid
,count(1) as pv
from logtable t
group by t.action,uuid
)  t1
where t1.flag<=10

 

 

 

 

 

贴一个oracle rank的帖子

rank,dense_rank,row_number区别

一:语法(用法):
     rank() over([partition by col1] order by col2) 
     dense_rank() over([partition by col1] order by col2) 
     row_number() over([partition by col1] order by col2) 
     其中[partition by col1]可省略。


二:区别
    三个分析函数都是按照col1分组内从1开始排序
    
    row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页
    dense_rank() 是连续排序,两个第二名仍然跟着第三名
    rank()       是跳跃拍学,两个第二名下来就是第四名
    
    理论就不多讲了,看了案例,一下就明白了
    
SQL> create table t(
  2   name varchar2(10),
  3   score number(3));
 
Table created
 
SQL> insert into t(name,score) 
  2   select '语文',60 from dual union all
  3   select '语文',90 from dual union all
  4   select '语文',80 from dual union all
  5   select '语文',80 from dual union all
  6   select '数学',67 from dual union all
  7   select '数学',77 from dual union all
  8   select '数学',78 from dual union all
  9   select '数学',88 from dual union all
 10   select '数学',99 from dual union all
 11   select '语文',70 from dual
 12  /
 
10 rows inserted
 
SQL> select * from t;
 
NAME       SCORE
---------- -----
语文          60
语文          90
语文          80
语文          80
数学          67
数学          77
数学          78
数学          88
数学          99
语文          70
 
10 rows selected
 
SQL> select name,score,rank() over(partition by name order by score) tt from t;
 
NAME       SCORE         TT
---------- ----- ----------
数学          67          1
数学          77          2
数学          78          3
数学          88          4
数学          99          5
语文          60          1
语文          70          2
语文          80          3   <----
语文          80          3   <----
语文          90          5
 
10 rows selected
 
SQL> select name,score,dense_rank() over(partition by name order by score) tt from t;
 
NAME       SCORE         TT
---------- ----- ----------
数学          67          1
数学          77          2
数学          78          3
数学          88          4
数学          99          5
语文          60          1
语文          70          2
语文          80          3   <----
语文          80          3   <----
语文          90          4
 
10 rows selected
 
SQL> select name,score,row_number() over(partition by name order by score) tt from t;
 
NAME       SCORE         TT
---------- ----- ----------
数学          67          1
数学          77          2
数学          78          3
数学          88          4
数学          99          5
语文          60          1
语文          70          2
语文          80          3  <----
语文          80          4  <----
语文          90          5
 
10 rows selected
 
SQL> select name,score,rank() over(order by score) tt from t;
 
NAME       SCORE         TT
---------- ----- ----------
语文          60          1
数学          67          2
语文          70          3
数学          77          4
数学          78          5
语文          80          6
语文          80          6
数学          88          8
语文          90          9
数学          99         10
 
10 rows selected
 

大家应该明白了吧!呵呵!接下来看应用

一:dense_rank------------------查询每门功课前三名


  select name,score from (select name,score,dense_rank() over(partition by name order by score desc) tt from t) x where x.tt<=3
  
 
NAME       SCORE
---------- -----
数学          99
数学          88
数学          78
语文          90
语文          80
语文          80
 
6 rows selected

二:rank------------------语文成绩70分的同学是排名第几。
   select name,score,x.tt from (select name,score,rank() over(partition by name order by score desc) tt from t) x where x.name='语文' and x.score=70
 
 
NAME       SCORE         TT
---------- ----- ----------
语文          70          4
    
三:row_number——————分页查询
     select xx.* from (select t.*,row_number() over(order by score desc) rowno from t) xx where xx.rowno between 1 and 3;
 
NAME       SCORE      ROWNO
---------- ----- ----------
数学          99          1
语文          90          2
数学          88          3

分享到:
评论

相关推荐

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

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

    02.hive内置函数--窗口分析函数--row_number_over.mp4

    02.hive内置函数--窗口分析函数--row_number_over.mp4

    test_hive.rar_ThriftHive.php_hive_hive php_php hive_php hive Thr

    标题中的“test_hive.rar_ThriftHive.php_hive_hive php_php hive_php hive Thr”暗示了我们讨论的主题是关于使用PHP通过Thrift接口与Hive数据仓库进行交互的一个库,具体来说,是一个名为“ThriftHive.php”的文件...

    hive1_2_1jars.zip

    标题“hive1_2_1jars.zip”指的是一个包含Hive 1.2.1版本相关库的压缩文件,这些库可能用于支持Spark 3.x版本与Hive的交互。在Spark 3中,如果你需要连接到Hive元存储进行数据操作,你需要正确配置Spark的`spark.sql...

    Hive_JDBC.zip_hive java_hive jdbc_hive jdbc pom_java hive_maven连

    在大数据处理领域,Apache Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询存储在Hadoop集群中的大型数据集。Hive JDBC(Java Database Connectivity)是Hive提供的一种...

    Cloudera_HiveJDBC_2.5.4.1006.zip

    Cloudera_HiveJDBC_2.5.4.1006.zip 是一个由Cloudera提供的Hive JDBC驱动程序的压缩包,版本号为2.5.4.1006。Hive JDBC(Java Database Connectivity)是Apache Hive项目的一部分,它允许通过Java编程语言或其他支持...

    hive_jdbc_2.6.2.1002.zip

    Hive JDBC 2.6.2.1002 是一个关键组件,它在大数据处理领域扮演着重要的角色。Hive 是由 Apache 软件基金会开发的一个数据仓库工具,它允许用户使用类 SQL 查询语言(HQL)来处理存储在分布式文件系统中的大规模数据...

    hive客户端安装_hive客户端安装_hive_

    2. 修改Hive配置文件($HIVE_HOME/conf/hive-site.xml),添加以下内容: ```xml &lt;name&gt;javax.jdo.option.ConnectionURL &lt;value&gt;jdbc:derby:;databaseName=/var/lib/hive/metastore;create=true &lt;name&gt;...

    hive X86_64的工具包

    3. 设置环境变量,如`HIVE_HOME`和`PATH`。 4. 初始化Hive元数据,通常通过`hiveserver2`或`metastore_db`服务。 5. 使用`hive`命令启动Hive Shell,开始执行HQL。 Hive支持多种操作,如创建表、加载数据、查询数据...

    hive2.1.1_mysql_sqoop.zip

    标题中的“hive2.1.1_mysql_sqoop.zip”表明这是一个与Hive 2.1.1、MySQL数据库和Sqoop工具相关的压缩包。这个压缩文件包含了一系列组件,旨在帮助用户在数据仓库环境中进行数据导入导出操作。下面将详细阐述这些...

    Cloudera_HiveJDBC_2.5.4.1006,hive-1.1.0-cdh5.13.2.tar

    可用于在DataGrip连接CDH HIVE,也可以用于在idea或eclipse中连接hive使用,压缩包中包含hive-1.1.0-cdh5.13.2.tar和Cloudera_HiveJDBC_2.5.4.1006,已测试成功,尽情享用!

    Hive安装讲义(linux_hive windows_mysql)

    需要添加HIVE_HOME、HADOOP_HOME和JAVA_HOME变量,并将其添加到PATH变量中。 6. Hive配置文件修改 Hive的配置文件需要根据实际情况进行修改。需要修改hive-config.sh文件,添加JAVA_HOME、HIVE_HOME和HADOOP_HOME...

    hive_site.zip

    hive_site.xml,供参考。 hive_site.xml,供参考 hive_site.xml,供参考 hive_site.xml,供参考 hive_site.xml,供参考 hive_site.xml,供参考

    编译的spark-hive_2.11-2.3.0和 spark-hive-thriftserver_2.11-2.3.0.jar

    spark-hive_2.11-2.3.0 spark-hive-thriftserver_2.11-2.3.0.jar log4j-2.15.0.jar slf4j-api-1.7.7.jar slf4j-log4j12-1.7.25.jar curator-client-2.4.0.jar curator-framework-2.4.0.jar curator-recipes-2.4.0....

    Hive安装讲义(linux_hive linux_mysql)

    Hive安装讲义(linux_hive linux_mysql) Hive安装讲义中涵盖了Hive的安装过程,包括Hadoop和MySQL的安装。下面是从给定的文件中生成的相关知识点: 一、Hadoop 安装 * Hadoop 安装是Hive 运行环境的前提条件 * ...

    hive高级分析函数与优化.rar_hive_hive 函数优化_hive 分析 大数据_hive高级优化_oldwlc

    在大数据分析领域,Hive作为一个基于Hadoop的数据仓库工具,被广泛用于处理和分析大规模数据。本资料主要探讨Hive的高级分析函数及其优化技术,旨在帮助用户更高效地利用Hive进行大数据处理。以下是对标题和描述中...

    hive分析函数

    本文将介绍 Hive 中的四个序列函数:NTILE、ROW_NUMBER、RANK 和 DENSE_RANK。 首先,让我们了解什么是序列函数。序列函数是 Hive 中的一种特殊函数,用于对数据进行排序和编号。序列函数可以将数据分组并对每组...

    hive_windows可执行文件

    - 提供的"hive_windows可执行文件"是一个适用于Windows系统的Hive版本,包含了运行Hive所需的基本组件。 2. **解压和替换**: - 用户需要将下载的压缩包解压,解压后的文件包含Hive的命令行工具和配置脚本。 - ...

    hive 分组取TopN

    hive不直接支持分组取TopN的操作,需要自定义udf函数打成jar包添加到hive运行环境中

    hive_big_table.tar.gz

    标题中的"hive_big_table.tar.gz"表明这是一个与Hive相关的压缩文件,可能包含了大型Hive表的数据或元数据。Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)进行...

Global site tag (gtag.js) - Google Analytics