五、Hive查询

5.1、创建职工信息表

任务实现:
1、创建表dept,emp和salgrade





2、导入数据
将数据emp.txt导入到表emp

#emp.txt
7369,SMITH,CLERK,7902,1980-12-17,800.00,,20
7499,ALLEN,SALESMAN,7698,1981-2-20,1600.00,300.00,30
7521,WARD,SALESMAN,7698,1981-2-22,1250.00,500.00,30
7566,JONES,MANAGER,7839,1981-4-2,2975.00,,20
7654,MARTIN,SALESMAN,7698,1981-9-28,1250.00,1400.00,30
7698,BLAKE,MANAGER,7839,1981-5-1,2850.00,,30
7782,CLARK,MANAGER,7839,1981-6-9,2450.00,,10
7839,KING,PRESIDENT,,1981-11-17,5000.00,,10
7844,TURNER,SALESMAN,7698,1981-9-8,1500.00,0.00,30
7900,JAMES,CLERK,7698,1981-12-3,950.00,,30
7902,FORD,ANALYST,7566,1981-12-3,3000.00,,20
7934,MILLER,CLERK,7782,1982-1-23,1300.00,,10

将数据dept.txt导入到表dept

#dept.txt
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

将数据salgrade.txt导入到表salgrade

#salgrade.txt
1,700,1200
2,1201,1400
3,1401,2000
4,2001,3000
5,3001,9999



5.2、查询入门

5.2.1、Select语法

SELECT  [ALL|DISTINCT]  字段列表(字段1 别名,....)
FROM 表1 别名, 表2 别名, ....
WHERE 条件 ….
GROUP BY 分组字段  HAVING(组约束条件)
ORDER BY 排序字段1 Asc | Desc,  字段2 Asc|Desc, .....
[CLUSTER BY 字段 | [DISTRIBUTE BY字段] [SORT BY字段]]
LIMIT M,N;
DISTRIBUTE BY 相同字段值会分到一个分区
CLUSTER BY 相当于前两个

5.2.2、distinct去重查询

任务实现:
1.查询emp中所有的部门编号


2.查询emp中相同部门不同职位的部门职位信息

5.2.3、order by查询

任务实现:
1.将部门编号不为10的所有员工按员工编号升序排列


2.将所有员工先按部门编号升序,当部门一样时,再按姓名降序排

5.2.4、内置函数


任务实现:
1.查看emp表中平均薪水是多少并对其四舍五入保留两位小数显示

2.统计emp表中有多少个不重复部门

group by…having分组查询
group by按照其后的字段分组,可使用多个字段进行分组。通常配合having使用,having后面的条件是对组的约束。同时SELECT子句中的字段必须是分组中的字段或分组函数

任务实现: 查询emp表平均薪水大于2000的部门编号、平均薪水

任务实现:
1.统计获救与死亡情况

select survived,count(survived) from tidanic group by survived;

2.统计舱位分布情况

select pclass,count(pclass) from tidanic group by pclass;

3.统计港口登船人员分布情况

select embarked,count(embarked) from tidanic group by embarked;

5.3、select连接查询和子查询

5.3.1、join连接查询

任务实现: 查询emp表薪水大于2500的员工姓名及所在部门名称

left outer join:左边表的所有记录连接结果会被返回,右边表没有符合on条件的,连接的右边的列为Null
right outer join:右边表的所有记录连接结果会被返回,左边表没有符合on条件的,连接的左边的列为Null
full outer join:返回两个表所有的记录连接结果
left semi join:左半开边连接,只返回满足连接条件的左边记录,类似MySQL in
注意:On后面只支持=,优化的方式就是大表放在最后面去连接,因为前面的表会被缓存,只有最后一个会通过扫描的方式,left semi join:一旦满足条件就返回左边记录,不进行连接,类似于in。。。exists

5.3.2、子查询

任务实现:
1.在emp表中,工资最高的员工姓名、薪水

2.在emp表中,工资高于平均工资员工姓名、薪水


5.3.3、case…when…then查询

任务实现:
查询emp表中的员工姓名,薪水,如果薪水小于2000标记为low,如果薪水在2000和5000之间标记为middle,如果薪水大于5000标记为high

5.4、任务实现:分析影响生存率关系

1.统计各个性别存活数

select sex,count(*) as sexcount from tidanic where survived=1 group by sex

2.计算存活总数

select count(*) as allcount from tidanic where survived=1

3.统计性别与生存率的关系

select a.sex,a.sexcount/b.allcount as count from (select sex,count(*) as sexcount from tidanic where survived=1 group by sex) a join (select count(*) as allcount from tidanic where survived=1) b on 1=1;

同理:

4.统计客舱等级与生存率的关系

select a.pclass,a.sexcount/b.allcount as count from (select pclass,count(*) as sexcount from tidanic where survived=1 group by pclass) a join (select count(*) as allcount from tidanic where survived=1) b on 1=1;

5.统计登船港口与生存率的关系

select a.embarked,a.sexcount/b.allcount as count from (select embarked,count(*) as sexcount from tidanic where survived=1 group by embarked) a join (select count(*) as allcount from tidanic where survived=1) b on 1=1;

5.5、Hive语句执行顺序

任务实现
查询emp表平均薪水大于2000的部门编号、平均薪水并按照部门编号排序,不包括10部门

SELECT deptno,avg(sal) as avg_sal FROM emp WHERE deptno<>10 GROUP BY deptno HAVING avg(sal)>2000  ORDER BY deptno;

可以在执行HQL语句前加explain,可查看执行顺序

SQL执行顺序

FROM ... WHERE ... GROUP BY ... AVG SUM 等聚合函数 ... HAVING ... SELECT... ORDER BY ...

Hive执行顺序

FROM ... WHERE ... SELECT ... GROUP BY ... HAVING ... ORDER BY ...

Hive的执行顺序也是MapReduce的执行顺序
map阶段:

  • 执行from加载:进行表的查找与加载
  • 执行where过滤:进行条件过滤与筛选
  • 执行select查询:进行输出项的筛选
  • 执行group by分组:描述了分组后需要计算的函数
  • map端文件合并:map端本地溢出写文件的合并操作,每个map最终形成一个临时文件。 然后按列映射到对应的reduce阶段

reduce阶段:

  • group by:对map端发送过来的数据进行分组并进行计算。
  • Having:最后过滤列用于输出结果
  • order by:排序后进行结果输出到HDFS文件

学习笔记Hive(五) —— Hive应用(3)—— Hive查询相关推荐

  1. mysql学习笔记(五) 数据库表的查询基本操作

    数据库表的查询基本操作 DQL(Data Query Language): 查询操作. 一.单表查询: 一.普通查询 --查询student表中的所有数据 select *from student - ...

  2. HiveQL学习笔记(五):Hive练习题

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  3. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  4. JavaScript学习笔记(五)

    JavaScript学习笔记(五) ①Array类 本地对象 ②Date类 ①Global对象 对象的类型   内置对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天内置对象Global对 ...

  5. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  6. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  7. Windows x64内核学习笔记(五)—— KPTI(未完待续)

    Windows x64内核学习笔记(五)-- KPTI(未完待续) KPTI 实验一:构造IDT后门并读取Cr3 参考资料 KPTI 描述:KPTI(Kernel page-table isolati ...

  8. Intel VT学习笔记(五)—— 调试技巧

    Intel VT学习笔记(五)-- 调试技巧 要点回顾 INT 3失效 调试技巧 参考资料 要点回顾 在上一篇中,我们主要学习了如何填写Guest state fields的各项字段,以及如何对错误码 ...

  9. 软件调试学习笔记(五)—— 软件断点内存断点

    软件调试学习笔记(五)-- 软件断点&内存断点 调试的本质 软件断点 软件断点的执行流程 分析INT 3执行流程 实验:处理软件断点 内存断点 内存断点的执行流程 实验:处理内存断点 调试的本 ...

  10. Windows异常学习笔记(五)—— 未处理异常

    Windows异常学习笔记(五)-- 未处理异常 要点回顾 最后一道防线 实验一:理解最后一道防线 实验二:新线程的最后一道防线 总结 UnhandledExceptionFilter 实验三:理解U ...

最新文章

  1. C#操作xml文件:使用XmlDocument 实现读取和写入
  2. 【人物】乔布斯:A级人才的自尊心不需要你呵护
  3. 【ARM】Tiny4412裸板编程之ADC
  4. [html] 如何优化页面的渲染过程?
  5. 程序员的算法课(15)-分治法获取文件中出现频次最高100词
  6. 源代码:spark-shell解读
  7. python语言适用于哪些领域_Python用于哪些领域
  8. Linux下安装PHP扩展
  9. magisk卸载内置软件_手把手教你使用ADB卸载手机内置App软件
  10. java判断日文_java判断字符串是否中文、日文
  11. 小米路由3c padavan固件
  12. word文档通配符换行_Word指定位置批量插入表格,别人花一天搞不出来,我只用了10秒...
  13. python逐行读取xls文件
  14. location属性和prototype属性介绍
  15. 八段数码管数字显示实验c语言,八段数码管显示实验.doc
  16. MySql使用存储过程开发
  17. kafka web页面监控KafkaOffsetMonitor
  18. 淘宝封杀返现模式 淘宝客返利网站模式遇挑战
  19. 钢管车架管材的分级介绍 (zz)
  20. 基于Android P版本PKMS详解二

热门文章

  1. 文巾解题 12. 整数转罗马数字
  2. MySQL从入门到精通50讲(十一)-MySQL正则表达式及事务
  3. NLP通用模型decaNLP诞生,一个模型搞定十大自然语言常见任务
  4. mysql中OPTIMIZE TABLE的作用
  5. 数据分析系列:绘制折线图(matplotlib)
  6. QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
  7. 十行Python代码搞定图片中的物体检测
  8. android告别篇-对于源码我的一些看法
  9. 从平台到中台:Elaticsearch 在蚂蚁金服的实践经验
  10. 字符编码的前世今生--转