自从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使用介绍
02.hive内置函数--窗口分析函数--row_number_over.mp4
hive JDBC连接实例 maven工程
hive不直接支持分组取TopN的操作,需要自定义udf函数打成jar包添加到hive运行环境中
hive_jdbc_2.6.2.1002
一个基于thrift的进行使用php操作hive的一个类库的封装。
spark3读hive1,配置spark.sql.hive.metastore.jars
cloudera官方hive的jdbc包。cloudera官网下载的。用来做数据库连接,好用。
Hive安装讲义(linux_hive windows_mysql)
Hive安装讲义(linux_hive linux_mysql)
hive_site.xml,供参考。 hive_site.xml,供参考 hive_site.xml,供参考 hive_site.xml,供参考 hive_site.xml,供参考 hive_site.xml,供参考
可用于在DataGrip连接CDH HIVE,也可以用于在idea或eclipse中连接hive使用,压缩包中包含hive-1.1.0-cdh5.13.2.tar和Cloudera_HiveJDBC_2.5.4.1006,已测试成功,尽情享用!
hive X86_64的工具包,测试可用,jar齐全。
Apache Hive Cookbook_Code 源码 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
Hive理论_Hive-基于MapReduce框架的数据仓库解决方案_ZN.doc
hive_jdbc_2.6.1.1001,hive_jdbc_2.6.1.1001,hive_jdbc_2.6.1.1001
赠送jar包:flink-connector-hive_2.11-1.10.0.jar; 赠送原API文档:flink-connector-hive_2.11-1.10.0-javadoc.jar; 赠送源代码:flink-connector-hive_2.11-1.10.0-sources.jar; 赠送Maven依赖信息文件:flink-...
大数据分析工具 hive 高级分析函数的使用与优化,笔记整理!
Hive用户指南,使用手册,简明扼要。内容包括架构、基本操作、参数设置、UDF,以及优化及使用技巧等等。
Hive用户(Hive_user_guide)_中文版pdf