第1关:Hive排序


任务描述

本关任务:2013722日买入量最高的三种股票。

相关知识

为了完成本关任务,你需要掌握: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 bydistribute by中所用的列相同,可以缩写为cluster by以便同时制定两者所用的列cluster by的功能就是distribute bysort by相结合(注意被cluster by指定的列只能是升序,不能指定ascdesc)。

以下两句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

编程要求

在右侧编辑器补充代码,查询出2013722日的哪三种股票买入量最多。

表名: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排序相关推荐

  1. Hive常见查询操作与函数汇总

    目录 一.查询操作 1.基本查询(Like VS RLike) 2.Join语句 3.分组 4.排序 sort by 和 distribute by 6.分桶抽样 二.函数汇总 1.查询函数 行与列的 ...

  2. hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)

    分区表创建 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition分区概念 分区表指的是在创建表的时 ...

  3. MySQL数据库 - 复杂查询(二)第二关

    @R星校长 第2关:查询修课相同学生信息 本关任务:根据提供的表和数据,查询与s_id=01号同学学习的课程完全相同的其他同学的信息(学号s_id,姓名s_name,性别s_sex). student ...

  4. C#access数据库查询操作(二)

    在前面介绍了access数据库的相关操作,这里介绍一下查询条件为变量的情况,比如用户从DataTimePicker控件中获取时间,传入时间,查询某一些时间段的数据 当查询条件为变量时,SQL语言其实与 ...

  5. MongoDB 文档的高级查询操作

    第1关:数据的导入导出 本关任务:向数据库导入数据和从数据库导出数据. 第2关:高级查询(一) 本关任务:根据编程要求完成文档查询. 第3关:高级查询(二) 本关任务:根据编程要求完成文档查询. 第4 ...

  6. MongoDB文档查询操作(三)

    关于MongoDB中的查询,我们已经连着介绍了两篇文章了,本文我们来介绍另外一个查询概念游标. 本文是MongoDB系列的第七篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安装Mong ...

  7. Hive学习之路(二):Hive表操作详讲

    操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...

  8. 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 ...

  9. 实验二 SQL 语言——SELECT 查询操作(第一部分)

    SQL 语言--SELECT 查询操作 实验目的: -了解查询的概念和方法:-掌握 SQL Server 集成管理器查询子窗口中执行 SELECT 操作的方法:-掌握 SELECT 语句在单表查询中的 ...

最新文章

  1. MIT黑科技:“不开卷也有益”,计算机不翻书就能读完一本书
  2. 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
  3. 循环——批量处理数据
  4. JavaScript递归算法统计(将整数n分成任意两份不能相同的k份)分法的种数
  5. 推荐一个比较好用的Chrome扩展应用,提供了桌面便签功能
  6. linux中yum教程,CentOS7下yum使用
  7. 统计MySQL中某数据库硬盘占用量大小
  8. Curvilinear structure detections
  9. Ray︱高性能的分布式执行引擎 起个头~
  10. TrackBar问题,有高人能解决吗?
  11. 附上堆和栈的区别 (转贴)
  12. JS jeDate日期控件使用
  13. 读书笔记-人月神话13
  14. Socket(网络编程)面试题
  15. 模糊二维码识别、残缺二维码识别、快速二维码识别
  16. 蓝牙HID——将android设备变成蓝牙鼠标/触控板(BluetoothHidDevice)
  17. Micromedia Flash Player已终止一项可能不安全的操作的解决办法
  18. 个人发卡网源码搭建教程
  19. chm文件打开是空白的
  20. 前瞻性总结:全球未来十年不可不知的10大趋势

热门文章

  1. 【英语】-吞音与连读
  2. window 结束进程命令
  3. Java Core-第1章 Java程序入门
  4. C# WinForms窗体淡出效果
  5. 蓝桥杯:约数个数(C++)
  6. HTML链接CSS的三种方法
  7. 移动通信的一些技术名词英文缩写解释
  8. adb 查看指定APP日志
  9. consulandnacos
  10. 嵌套交叉验证的一致特征(Consensus features nested cross-validation)