hive求TopN语句
ROW_NUMBER,RANK(),DENSE_RANK()
先了解这三个之间的区别:
Rank():1,2,2,4,5(一般用这个较多,不会影响总排名)
Dense_rank():1,2,2,3,4,5(会影响最终排名)
Row_number():1,2,3,4,5,6(按照行数显示)
语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rank
partition by:类似hive的建表,分区的意思;
order by :排序,默认是升序,加desc降序;
rank:表示别名
表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
取TOPN数据
按照国家提取TOP3
样本数据:
国家 城市 Visitors
阿联酋,阿布扎比,137
阿联酋,阿布扎比,146
阿联酋,阿布扎比,178
阿联酋,阿布扎比,337
阿联酋,阿布扎比,178
阿联酋,阿布扎比,227
阿联酋,阿布扎比,157
阿联酋,迪拜,144
阿联酋,迪拜,268
阿联酋,迪拜,103
阿联酋,迪拜,141
阿联酋,迪拜,108
阿联酋,迪拜,266
澳大利亚,悉尼,141
澳大利亚,悉尼,122
澳大利亚,悉尼,153
澳大利亚,悉尼,128
澳大利亚,墨尔本,294
澳大利亚,墨尔本,230
澳大利亚,墨尔本,159
澳大利亚,墨尔本,188
澳大利亚,堪培拉,249
澳大利亚,堪培拉,378
澳大利亚,堪培拉,255
澳大利亚,堪培拉,240
导入数据
--执行下述语句
hive (temp)> hive -f 'HQL/loaddata.hql'>out/tmp;
-----------------------------------------------
drop table temp.tripdata;
CREATE table datatable (
country string,
city string,
Visitors int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE; load data local inpath 'home/loaddata'
overwrite into table temp.tripdata;
---------------------------------------------- ----------------------------------------------
--查看结果
hive (temp)> select * from tripdata;
country city visitors
阿联酋 阿布扎比 137
阿联酋 阿布扎比 146
阿联酋 阿布扎比 178
阿联酋 阿布扎比 337
阿联酋 阿布扎比 178
阿联酋 阿布扎比 227
阿联酋 阿布扎比 157
阿联酋 迪拜 144
阿联酋 迪拜 268
阿联酋 迪拜 103
阿联酋 迪拜 141
阿联酋 迪拜 108
阿联酋 迪拜 266
澳大利亚 悉尼 141
澳大利亚 悉尼 122
澳大利亚 悉尼 153
澳大利亚 悉尼 128
澳大利亚 墨尔本 294
澳大利亚 墨尔本 230
澳大利亚 墨尔本 159
澳大利亚 墨尔本 188
澳大利亚 堪培拉 249
澳大利亚 堪培拉 378
澳大利亚 堪培拉 255
澳大利亚 堪培拉 240
select country,city,visitors
from tripdata
order by visitors desc
limit 5; country city visitors
澳大利亚 堪培拉 378
阿联酋 阿布扎比 337
澳大利亚 墨尔本 294
阿联酋 迪拜 268
阿联酋 迪拜 266
按照国家、提取城市TOP3
select a.*
from (
select country,city,visitors, row_number() over (partition by country order by visitors desc ) rank
from tripdata
order by country,visitors desc
) a
where a.rank<=3; --结果
a.country a.city a.visitors a.rank
结果如下:
澳大利亚 堪培拉 378 1
澳大利亚 墨尔本 294 2
澳大利亚 堪培拉 255 3
阿联酋 阿布扎比 337 1
阿联酋 迪拜 268 2
阿联酋 迪拜 266 3
按照城市提取TOP3
select a.*
from (
select country,city,visitors, row_number() over (partition by city order by visitors desc ) rank
from tripdata
order by country,city,visitors desc
) a
where a.rank<=3;
--结果
a.country a.city a.visitors a.rank
澳大利亚 堪培拉 378 1
澳大利亚 堪培拉 255 2
澳大利亚 堪培拉 249 3
澳大利亚 墨尔本 294 1
澳大利亚 墨尔本 230 2
澳大利亚 墨尔本 188 3
澳大利亚 悉尼 153 1
澳大利亚 悉尼 141 2
澳大利亚 悉尼 128 3
阿联酋 迪拜 268 1
阿联酋 迪拜 266 2
阿联酋 迪拜 144 3
阿联酋 阿布扎比 337 1
阿联酋 阿布扎比 227 2
阿联酋 阿布扎比 178 3
hive求TopN语句的更多相关文章
- 第2节 网站点击流项目(下):3、流量统计分析,分组求topN
四. 模块开发----统计分析 select * from ods_weblog_detail limit 2;+--------------------------+---------------- ...
- [PY3]——求TopN/BtmN 和 排序问题的解决
需求 K长的序列,求TopN K长的序列,求BtmN 排序问题 解决 heap.nlargest().heap.nsmallest( ) sorted( )+切片 max( ).min( ) 总结和比 ...
- 吴超老师课程--Hive的执行语句
为什么选择Hive? (1)基于Hadoop的大数据的计算/扩展能力(2)支持SQL like查询语言(3)统一的元数据管理(4)简单编程 一:Hive的数据类型(1)基本数据类型tinyint/sm ...
- hive 添加UDF(user define function) hive的insert语句
add JAR /home/hadoop/study/study2/utf.jar; package my.bigdata.udf; import org.apache.hadoop.hive.ql. ...
- Hive——基本DML语句
Hive--基本DML语句 DML:Data Manipulation Language(数据操作语言,与关系型数据库相似) 官方手册:https://cwiki.apache.org/conflue ...
- Hive——基本DDL语句
Hive--基本DDL语句 DDL:Data Definition Language(数据定义语言,与关系型数据库相似) 官方手册:https://cwiki.apache.org/confluenc ...
- Hive的HQL语句及数据倾斜解决方案
[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51675005 作者: 朱培 ID ...
- Hadoop学习之路(二十)MapReduce求TopN
前言 在Hadoop中,排序是MapReduce的灵魂,MapTask和ReduceTask均会对数据按Key排序,这个操作是MR框架的默认行为,不管你的业务逻辑上是否需要这一操作. 技术点 MapR ...
- 求SQL语句递归的算法
表结构是这样的 部门 上级部门 A BB CC DA AB BC C ...
随机推荐
- 论文翻译——Lattice indexing for spoken term detection
第II节简要介绍与本文有关的先前工作第III节介绍文中使用的定义以及术语 第IV节介绍如何从原始ASR lattices中生成倒排索引结构 第V节详细介绍了ASR结构以及实验使用的数据 第VI节提供了 ...
- spark基础知识(1)
一.大数据架构 并发计算: 并行计算: 很少会说并发计算,一般都是说并行计算,但是并行计算用的是并发技术.并发更偏向于底层.并发通常指的是单机上的并发运行,通过多线程来实现.而并行计算的范围更广,他是 ...
- MySQL1:客户端/服务器架构
一.MySQL的客户端/服务器架构 前言 之前对MySQL的认知只限于会写些SQL,本篇算是笔记,记录和整理下自己对MySQL不熟悉的地方. 大致逻辑: MySQL的服务器程序直接和我们存储的数据打交 ...
- 3D Slicer中文教程(六)—调用matlab函数(MatlabBridge使用方法)
1.安装MatlabBridge插件 (1)在工具栏找到Extension,点击进入Extension Manager (2)找到MatlabBridge,安装 2.配置MATLAB环境 (1)在模块 ...
- selenium采用xpath方法识别页面元素
有些HTML页面中的元素中属性较少,经常有找不到id.class.name等常用属性的时候,这个时候xpath.css就能很好的识别到我们的元素. Firefox和chrome浏览器中均有xpath. ...
- vue面试题总结
1.vue双向绑定的实现原理2.js的继承和原型链3.es6语法箭头函数和普通函数的区别 普通函数的this总是指向它的直接调用者. 在严格模式下,没找到直接调用者,则函数中的this是undefin ...
- java学习笔记02-Eclipse IDE配置
Eclipse是java的ide工具,ide是集成开发工具.实际开发中都需要使用ide工具.eclipse下载 java代码在运行时,是需要先进行编译,然后才能运行.可以直接在IDE工具里运行,它会帮 ...
- Chrome浏览器自动填充<input>标签的密码
问题:登录页面登录时,Chrome浏览器保存了用户名和密码,在其他页面管理其他的账户和密码时,密码框先是显示正确的密码,然后一闪而过被覆盖. 原因:问了技术主管才得知,Chrome浏览器中的,保存用户 ...
- Gradle安装步骤
一. Gralde介绍 Gradle是基于Groovy语言的项目自动化建构工具,在使用Gradle之前常用的构建工具有Ant和Maven,使用这些工具我们可以用来管理项目依赖,打包,部署和发布等.使用 ...
- Linq中类型转换
var BusDebts = db1.BusDebts.Where(s => s.BusOpt >= dts && s.BusOpt < dte && ...