HIVE基本查询操作(二)——第1关:Hive排序
第1关:Hive排序
任务描述
本关任务:2013
年7
月22
日买入量最高的三种股票。
相关知识
为了完成本关任务,你需要掌握:1. Hive
的几种排序;2. limit
使用。
hive的排序
① order by
order by
后面可以有多列进行排序,默认按字典排序(desc
:降序,asc
(默认):升序);order by
为全局排序;order by
需要reduce
操作,且只有一个reduce
,无法配置(因为多个reduce
无法完成全局排序);- 如果指定了
hive.mapred.mode=strict
(默认值是nonstrict
),这时就必须指定limit
来限制输出条数。
表名:student
class | name | scores |
---|---|---|
A
|
xiaoming
|
89
|
A
|
xiaojun
|
72
|
B
|
xiaohong
|
88
|
C
|
xiaoqiang
|
92
|
C
|
xiaogang
|
84
|
按scores
降序:
select * from student order by scores desc;
输出
C xiaoqiang 92
A xiaoming 89
B xiaohong 88
C xiaogang 84
A xiaojun 72
② sort by
Hive
中指定了sort by
,那么在每个reducer
端都会做排序,也就是说保证了局部有序(每个reducer
出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer
),好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序了)。
按scores
降序:
select * from student sort by scores desc;
输出:
C xiaoqiang 92
A xiaoming 89
B xiaohong 88
C xiaogang 84
A xiaojun 72
③ distribute by
distribute by
控制map
输出结果的分发,相同字段的map
输出会发到一个reduce
节点去处理。sort by
为每一个reducer
产生一个排序文件,他俩一般情况下会结合使用。(这个肯定是全局有序的,因为相同的class
会放到同一个reducer
去处理。这里需要注意的是distribute by
必须要写在sort by
之前)。
按scores
降序:
select * from student distribute by class sort by scores desc;
输出:
C xiaoqiang 92
A xiaoming 89
B xiaohong 88
C xiaogang 84
A xiaojun 72
④ cluster by
如果sort by
和distribute by
中所用的列相同,可以缩写为cluster by
以便同时制定两者所用的列cluster by
的功能就是distribute by
和sort by
相结合(注意被cluster by
指定的列只能是升序,不能指定asc
和desc
)。
以下两句HQL
查询结果相同:
select * from student cluster by scores;
select * from student distribute by scores sort by scores desc;
输出:
A xiaojun 72
C xiaogang 84
B xiaohong 88
A xiaoming 89
C xiaoqiang 92
limit
在Hive
查询中要限制查询输出条数, 可以用limit
关键词指定
只输出2
条数据:
select * from student limit 2;
输出:
A xiaoming 89
A xiaojun 72
编程要求
在右侧编辑器补充代码,查询出2013
年7
月22
日的哪三种股票买入量最多。
表名:total
col_name | data_type | comment |
---|---|---|
tradedate
|
string
|
交易日期 |
tradetime
|
string
|
交易时间 |
securityid
|
string
|
股票ID |
bidpx1
|
string
|
买入价 |
bidsize1
|
int
|
买入量 |
offerpx1
|
string
|
卖出价 |
bidsize2
|
int
|
卖出量 |
部分数据如下所示:
20130724 145004 152896 2.62 6960 2.63 13000
20130724 145101 152896 2.86 13880 2.89 6270
20130724 145128 152896 2.85 327400 2.851 1500
20130724 145143 152896 2.603 44630 2.8 10650
数据说明:
(152896:每种股票id)
(20130724: 2013年7月24日)
(145004: 14点50分04秒)
测试说明
平台会对你编写的代码进行测试:
预期输出:
股票id
买入量
553211 680580680
412233 230929160
856947 104360800
开始你的任务吧,祝你成功!
----------禁止修改----------
create database if not exists mydb;
use mydb;
create table if not exists total(
tradedate string,
tradetime string,
securityid string,
bidpx1 string,
bidsize1 int,
offerpx1 string,
bidsize2 int)
row format delimited fields terminated by ','
stored as textfile;
truncate table total;
load data local inpath '/root/files' into table total;
----------禁止修改--------------------begin----------
select securityid, sum(bidsize1) s
from total
where tradedate="20130722" group by securityid order by s desc limit 3;
----------end----------
HIVE基本查询操作(二)——第1关:Hive排序相关推荐
- Hive常见查询操作与函数汇总
目录 一.查询操作 1.基本查询(Like VS RLike) 2.Join语句 3.分组 4.排序 sort by 和 distribute by 6.分桶抽样 二.函数汇总 1.查询函数 行与列的 ...
- hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)
分区表创建 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition分区概念 分区表指的是在创建表的时 ...
- MySQL数据库 - 复杂查询(二)第二关
@R星校长 第2关:查询修课相同学生信息 本关任务:根据提供的表和数据,查询与s_id=01号同学学习的课程完全相同的其他同学的信息(学号s_id,姓名s_name,性别s_sex). student ...
- C#access数据库查询操作(二)
在前面介绍了access数据库的相关操作,这里介绍一下查询条件为变量的情况,比如用户从DataTimePicker控件中获取时间,传入时间,查询某一些时间段的数据 当查询条件为变量时,SQL语言其实与 ...
- MongoDB 文档的高级查询操作
第1关:数据的导入导出 本关任务:向数据库导入数据和从数据库导出数据. 第2关:高级查询(一) 本关任务:根据编程要求完成文档查询. 第3关:高级查询(二) 本关任务:根据编程要求完成文档查询. 第4 ...
- MongoDB文档查询操作(三)
关于MongoDB中的查询,我们已经连着介绍了两篇文章了,本文我们来介绍另外一个查询概念游标. 本文是MongoDB系列的第七篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安装Mong ...
- Hive学习之路(二):Hive表操作详讲
操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...
- 5、HIVE DML操作、load数据、update、Delete、Merge、where语句、基于分区的查询、HAVING子句、LIMIT子句、Group By语法、Hive 的Join操作等
目录: 4.2.1 Load文件数据到表中 4.2.2查询的数据插入到表中 4.2.3将Hive查询的结果存到本地Linux的文件系统目录中 4.2.4通过SQL语句的方式插入数据 4.2.5 UPD ...
- 实验二 SQL 语言——SELECT 查询操作(第一部分)
SQL 语言--SELECT 查询操作 实验目的: -了解查询的概念和方法:-掌握 SQL Server 集成管理器查询子窗口中执行 SELECT 操作的方法:-掌握 SELECT 语句在单表查询中的 ...
最新文章
- MIT黑科技:“不开卷也有益”,计算机不翻书就能读完一本书
- 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
- 循环——批量处理数据
- JavaScript递归算法统计(将整数n分成任意两份不能相同的k份)分法的种数
- 推荐一个比较好用的Chrome扩展应用,提供了桌面便签功能
- linux中yum教程,CentOS7下yum使用
- 统计MySQL中某数据库硬盘占用量大小
- Curvilinear structure detections
- Ray︱高性能的分布式执行引擎 起个头~
- TrackBar问题,有高人能解决吗?
- 附上堆和栈的区别 (转贴)
- JS jeDate日期控件使用
- 读书笔记-人月神话13
- Socket(网络编程)面试题
- 模糊二维码识别、残缺二维码识别、快速二维码识别
- 蓝牙HID——将android设备变成蓝牙鼠标/触控板(BluetoothHidDevice)
- Micromedia Flash Player已终止一项可能不安全的操作的解决办法
- 个人发卡网源码搭建教程
- chm文件打开是空白的
- 前瞻性总结:全球未来十年不可不知的10大趋势