Hive-05之查询 分组、排序、case when、 什么情况下Hive可以避免进行MapReduce

一、目标

  1. 掌握hive中select查询语句中的基本语法
  2. 掌握hive中select查询语句的分组
  3. 掌握hive中select查询语句中的join
  4. 掌握hive中select查询语句中的排序

二、要点

1. 基本查询

  • 注意
    • SQL 语言大小写不敏感
    • SQL 可以写在一行或者多行
    • 关键字不能被缩写也不能分行
    • 各子句一般要分行写
    • 使用缩进提高语句的可读性
1.1 全表和特定列查询
  • 全表查询
select * from student;
  • 选择特定列查询
select empno, ename from emp;
1.2 列起别名
  • 重命名一个列

    • 紧跟列名,也可以在列名和别名之间加入关键字 ‘as’
  • 案例实操

     select ename AS name, deptno dn from emp;
    
1.3 常用函数
  • 1.求总行数(count)
 select count(*) cnt from emp;
  • 2、求工资的最大值(max)
select max(sal) max_sal from emp;
  • 3、求工资的最小值(min)
select min(sal) min_sal from emp;
  • 4、求工资的总和(sum)
select sum(sal) sum_sal from emp; 
  • 5、求工资的平均值(avg)
select avg(sal) avg_sal from emp;
1.4 limit 语句
  • 典型的查询会返回多行数据。limit子句用于限制返回的行数。
 select * from emp limit 5;
1.5 where 语句
  • 1、使用 where 子句,将不满足条件的行过滤掉
  • 2、where 子句紧随from子句
  • 3、案例实操
 select * from emp where sal >1000;
1.6 算术运算符
运算符描述
A+BA和B 相加
A-BA减去B
A*BA和B 相乘
A/BA除以B
A%BA对B取余
A&BA和B按位取与
A|BA和B按位取或
A^BA和B按位取异或
~AA按位取反
1.7 比较运算符
操作符支持的数据类型描述
A=B基本数据类型如果A等于B则返回true,反之返回false
A<=>B基本数据类型如果A和B都为NULL,则返回true,其他的和等号(=)操作符的结果一致,如果任一为NULL则结果为NULL
A<>B, A!=B基本数据类型A或者B为NULL则返回NULL;如果A不等于B,则返回true,反之返回false
A<B基本数据类型A或者B为NULL,则返回NULL;如果A小于B,则返回true,反之返回false
A<=B基本数据类型A或者B为NULL,则返回NULL;如果A小于等于B,则返回true,反之返回false
A>B基本数据类型A或者B为NULL,则返回NULL;如果A大于B,则返回true,反之返回false
A>=B基本数据类型A或者B为NULL,则返回NULL;如果A大于等于B,则返回true,反之返回false
A [NOT] BETWEEN B AND C基本数据类型如果A,B或者C任一为NULL,则结果为NULL。如果A的值大于等于B而且小于或等于C,则结果为true,反之为false。如果使用NOT关键字则可达到相反的效果。
A IS NULL所有数据类型如果A等于NULL,则返回true,反之返回false
A IS NOT NULL所有数据类型如果A不等于NULL,则返回true,反之返回false
IN(数值1, 数值2)所有数据类型使用 IN运算显示列表中的值
A [NOT] LIKE BSTRING 类型B是一个SQL下的简单正则表达式,如果A与其匹配的话,则返回true;反之返回false。B的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母’x’结尾,而‘%x%’表示A包含有字母’x’,可以位于开头,结尾或者字符串中间。如果使用NOT关键字则可达到相反的效果。like不是正则,而是通配符
A RLIKE B, A REGEXP BSTRING 类型B是一个正则表达式,如果A与其匹配,则返回true;反之返回false。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。
1.8 逻辑运算符
操作符操作描述
A AND B逻辑并如果A和B都是true则为true,否则false
A OR B逻辑或如果A或B或两者都是true则为true,否则false
NOT A逻辑否如果A为false则为true,否则false

2. 分组

2.1 Group By 语句

​ Group By 语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作。

  • 案例实操:

    • (1)计算emp表每个部门的平均工资
    select t.deptno, avg(t.sal) as avg_sal from emp t group by t.deptno;
    
    • (2)计算emp每个部门中每个岗位的最高薪水
    select t.deptno, t.job, max(t.sal) as  max_sal from emp t group by t.deptno, t.job;
    
2.2 Having语句
  • having 与 where 不同点

    • where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据

    • where后面不能写分组函数,而having后面可以使用分组函数

    • having只用于group by分组统计语句

  • 案例实操

    • 求每个部门的平均工资
    select deptno, avg(sal) from emp group by deptno;
    
    • 求每个部门的平均薪水大于2000的部门
    select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal > 2000;
    

3. join语句(25分钟)

3.1 等值 join
  • Hive支持通常的SQL JOIN语句,但是只支持等值连接,不支持非等值连接。

  • 案例实操

    • 根据员工表和部门表中的部门编号相等,查询员工编号、员工名称和部门名称;
    select e.empno, e.ename, d.deptno, d.dname from emp e join dept d
     on e.deptno = d.deptno;
    
3.2 表的别名
  • 好处

    • 使用别名可以简化查询。

    • 使用表名前缀可以提高执行效率。

  • 案例实操

    • 合并老师与课程表
    select * from teacher t join course c on t.id = c.id;
    
3.3 内连接 inner join
  • 内连接:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来。
    • join默认是inner join
  • 案例实操
select * from teacher t inner join course c  on t.id = c.id;
3.4 左外连接 left outer join
  • 左外连接:join操作符左边表中符合where子句的所有记录将会被返回。

  • 案例实操

    • 查询老师对应的课程
     select * from teacher t left outer join course c  on t.id = c.id;
    
3.5 右外连接 right outer join
  • 右外连接:join操作符右边表中符合where子句的所有记录将会被返回。

  • 案例实操

     select * from teacher t right outer join course c  on t.id = c.id;
    
3.6 满外连接 full outer join
  • 满外连接:将会返回所有表中符合where语句条件的所有记录。如果任一表的指定字段没有符合条件的值的话,那么就使用null值替代。

  • 案例实操

    select * from teacher t full outer join course c  on t.id = c.id;
    
3.7 多表连接
  • 多个表使用join进行连接

  • 注意:连接 n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。

  • 案例实操

    • 多表连接查询,查询老师对应的课程,以及对应的分数,对应的学生
    select * from 
    	teacher t  left join course c on t.id = c.id
                   left join score s on s.sid = c.cid
                   left join student stu on s.s_id = stu.s_id;
    

4. 排序

4.1 order by 全局排序
  • order by 说明

    • 全局排序,只有一个reduce
    • 使用 ORDER BY 子句排序
      • asc ( ascend)
        • 升序 (默认)
      • desc (descend)
        • 降序
    • order by 子句在select语句的结尾
  • 案例实操

    • 查询学生的成绩,并按照分数降序排列
    select * from student s order by score desc ;
    
4.2 按照别名排序
  • 按照学生分数的平均值排序
select s.sid,s.tname, avg(score)  as score_avg  from student s  group by  s.sid,s.tname order by score_avg  desc;
4.3 多个列排序
  • 按照学生分数和年龄升序排序
select *  from student s order by score,age;
4.4 每个MapReduce内部排序(Sort By)局部排序
  • sort by:每个reducer内部进行排序,对全局结果集来说不是排序。

    • 1、设置reduce个数

      set mapreduce.job.reduces=3;
      
      • 2、查看设置reduce个数

        set mapreduce.job.reduces;
        
    • 3、查询成绩按照成绩降序排列

       select * from student s sort by s.score;
      
    • 4、将查询结果导入到文件中(按照成绩降序排列)

      insert overwrite local directory '/home/hadoop/hivedata/sort' select * from student s sort by s.score;
      
4.5 distribute by 分区排序
  • distribute by:类似MR中partition,采集hash算法,在map端将查询的结果中hash值相同的结果分发到对应的reduce文件中。结合sort by使用。

  • 注意

    • Hive要求 distribute by 语句要写在 sort by 语句之前。
  • 案例实操

    • 先按照学生 sid 进行分区,再按照学生成绩进行排序

      • 设置reduce的个数
      set mapreduce.job.reduces=3;
      
      • 通过distribute by 进行数据的分区,,将不同的sid 划分到对应的reduce当中去
      insert overwrite local directory '/home/hadoop/hivedata/distribute' select * from student distribute by sid sort by score;
      
4.6 cluster by
  • 当distribute by和sort by字段相同时,可以使用cluster by方式

  • 除了distribute by 的功能外,还会对该字段进行排序,所以cluster by = distribute by + sort by

    --以下两种写法等价
    
    insert overwrite local directory '/home/hadoop/hivedata/distribute_sort' 
    select * from student distribute  by score sort  by score;
    
    
    insert overwrite local directory '/home/hadoop/hivedata/cluster' 
    select * from student cluster by score;
    
    

五、拓展

5.1 case … when … then 语句
  • case …when …then 语句和if 条件语句类似,用于处理单个列的查询结果

  • 案例实战

    • 创建表
    create table employee(
    empid int, 
    deptid int,
    sex string,
    salary double
    )row format delimited 
    fields terminated by ' ';
    
    
    • 数据文件 employee.txt
    1       10      female  5500.0
    2       10      male    4500.0
    3       20      female  1900.0
    4       20      male    4800.0
    5       40      female  6500.0
    6       40      female  14500.0
    7       40      male    44500.0
    8       50      male    6500.0
    9       50      male    7500.0
    
    • 查询统计

      • 将员工按照性别打上标识
      select *,
      case sex
      when "female" then 1 
      when "male" then 0
      end as flag 
      from employee;
      
      • 将员工按照薪资待遇划分等级
      select *,
      case 
      when salary < 5000 then "低等收入" 
      when salary>= 5000 and salary < 10000 then "中等收入"
      when salary > 10000 then "高等收入"  
      end  as level 
      from employee;
      
⭐️5.2 什么情况下Hive可以避免进行MapReduce
  • hive 为了执行效率考虑,简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs目录中的文件进行filter过滤。也就是所谓的本地模式

    • 1、直接查询表的数据 不会进行Mapreduce

      select * from employee;
      
    • 2、查询语句中的过滤条件只是分区字段的情况下 不会进行Mapreduce。

      select * from order_partition where month='2019-03';
      
    • 此外,如果设置属性 set hive.exec.mode.local.auto=true; hive还是会尝试使用本地模式。

六、总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React:B站评论demo,实现列表渲染、删除按钮显示和功能实现、导航栏渲染切换及高亮显示、评论区的排序

功能要求&#xff1a; 1、渲染评论列表 2、删除评论功能&#xff1a;只显示自己评论的删除按钮&#xff1b;点击删除按钮&#xff0c;删除当前评论&#xff0c;列表中不再显示。 3、渲染导航Tab&#xff08;最新 | 最热&#xff09;和其 高亮实现 4、评论排序功能实现&…

ST表解决RMQ问题

引入 给定你一个长度为n的数组a&#xff0c;再给你q次询问&#xff0c;每次询问给定你一个区间[L,R]&#xff0c;让你求a数组中L~R中的最大值/最小值 我们利用常规算法求时很显然会超时&#xff0c;以此我们需要一个数据结构——ST表来解决 ST表 ST表是一个类似于线段树的东…

[数据结构] - - - 链表

一、定义 链表&#xff1a;是一种常见的线性数据结构&#xff0c;它通过一组节点&#xff08;Node&#xff09;来存储数据&#xff0c;每个节点包含两部分&#xff1a;数据域和指针域。 1.1 链表的基本概念 节点&#xff08;Node&#xff09;&#xff1a;链表的最小单元&#…

Linux的动态库与静态库

目录 动静态库的基本原理 认识动静态库 动静态库各自的特征 静态库 动态库 动静态库与内存 静态库的加载方式 动态库的加载方式 加载到物理内存的细节 静态库的打包与使用 打包 使用 动态库的打包与使用 打包 使用 我以前写的一篇文章中就用网吧与在宿舍自己组装电…

图漾PercipioIPTool软件使用

文章目录 前期准备1.PercipioIPTool软件1.1 更改网络适配器1.2 更改自动获取IP1.3设置静态IP 前期准备 1.一根超五类及其以上规格网线&#xff08;cat5e、cat6…&#xff09; 2.相机&#xff0c;配套网线和IO线 3.配套软件PercipioViewer或者PercipioIPTool软件(Windows环境使…

EasyRTC嵌入式WebRTC技术与AI大模型结合:从ICE框架优化到AI推理

实时通信技术在现代社会中扮演着越来越重要的角色&#xff0c;从视频会议到在线教育&#xff0c;再到远程医疗&#xff0c;其应用场景不断拓展。WebRTC作为一项开源项目&#xff0c;为浏览器和移动应用提供了便捷的实时通信能力。而EasyRTC作为基于WebRTC的嵌入式解决方案&…

《白帽子讲 Web 安全:点击劫持》

目录 摘要&#xff1a; 一、点击劫持概述 二、点击劫持的实现示例&#xff1a;诱导用户收藏指定淘宝商品 案例 构建恶意页面&#xff1a; 设置绝对定位和z - index&#xff1a; 控制透明度&#xff1a; 三、其他相关攻击技术 3.1图片覆盖攻击与 XSIO 3.2拖拽劫持与数据…

计算机网络---SYN Blood(洪泛攻击)

文章目录 三次握手过程SYN Flood攻击原理防御措施协议层优化网络层拦截系统配置调整 TCP协议是 TCP/IP 协议栈中一个重要的协议&#xff0c;平时我们使用的浏览器&#xff0c;APP等大多使用 TCP 协议通讯的&#xff0c;可见 TCP 协议在网络中扮演的角色是多么的重要。 TCP 协议…

GitCode 助力 python-office:开启 Python 自动化办公新生态

项目仓库&#xff1a;https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察&#xff0c;打造 Python 办公神器 项目作者程序员晚枫在运营拥有 14w 粉丝的 B 站账号 “Python 自动化办公社区” 时&#xff0c;敏锐察觉到非程序员群体对 Python 学习的强烈需求。在数字…

Trae智能协作AI编程工具IDE:如何在MacBook Pro下载、安装和配置使用Trae?

Trae智能协作AI编程工具IDE&#xff1a;如何在MacBook Pro下载、安装和配置使用Trae&#xff1f; 一、为什么选择Trae智能协作IDE&#xff1f; 在AI编程新时代&#xff0c;Trae通过以下突破性功能重新定义开发体验&#xff1a; 双向智能增强&#xff1a;AI不仅提供代码补全&a…

Qt空项目代码解释

一、 背景 创建的是一个 QWidget 项目。 二、main.cpp 1、图片 2、代码解释 &#xff08;1&#xff09;QApplication Qt 图形化界面中一定有 QApplication &#xff08;2&#xff09;Widget w; 是 QWidget 的子类。 &#xff08;3&#xff09;w.show(); 继承父类的显示…

Codeforces Round 1007 (Div. 2)(ABCD1)

A. The Play Never Ends 翻译&#xff1a; 让我们来介绍一种双人游戏--乒乓球&#xff0c;在这种游戏中&#xff0c;胜负永远分明&#xff0c;不可能出现平局。 索赛、福福和浩海三人想用一生的时间打乒乓球。他们决定用以下方式永远打下去&#xff1a; 在每场比赛中&#xff…

多元数据直观表示(R语言)

一、实验目的&#xff1a; 通过上机试验&#xff0c;掌握R语言实施数据预处理及简单统计分析中的一些基本运算技巧与分析方法&#xff0c;进一步加深对R语言简单统计分析与图形展示的理解。 数据&#xff1a; 链接: https://pan.baidu.com/s/1kMdUWXuGCfZC06lklO5iXA 提取码: …

蓝桥备赛(六)- C/C++输入输出

一、OJ题目输入情况汇总 OJ&#xff08;online judge&#xff09; 接下来会有例题 &#xff0c; 根据一下题目 &#xff0c; 对这些情况进行分析 1.1 单组测试用例 单在 --> 程序运行一次 &#xff0c; 就处理一组 练习一&#xff1a;计算 (ab)/c 的值 B2009 计算 (ab)/c …

Immich自托管服务的本地化部署与随时随地安全便捷在线访问数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 小伙伴们&#xff0c;你们好呀&#xff01;今天要给大家揭秘一个超炫的技能——如何把自家电脑变成私人云相册&#xff0c;并…

B/B+树与mysql索引

数据结构操作网站&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(log n)O(log n) B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(…

【智能音频新风尚】智能音频眼镜+FPC,打造极致听觉享受!【新立电子】

智能音频眼镜&#xff0c;作为一款将时尚元素与前沿科技精妙融合的智能设备&#xff0c;这种将音频技术与眼镜形态完美结合的可穿戴设备&#xff0c;不仅解放了用户的双手&#xff0c;更为人们提供了一种全新的音频交互体验。新立电子FPC在智能音频眼镜中的应用&#xff0c;为音…

0x02 js、Vue、Ajax

文章目录 js核心概念js脚本引入html的方式基础语法事件监听 Vuevue简介v-forv-bindv-if&v-showv-model&v-on Ajax js 核心概念 JavaScript&#xff1a;是一门跨平台、面向对象的脚本语言&#xff0c;用来控制网页行为实现交互效果&#xff0c;由ECMAScript、BOM、DOM…

初探WebAssembly

WebAssembly: 网页应用的性能革命 ​互联网技术日新月异&#xff0c;Web应用已经从简单的网页跃升为功能丰富的平台。然而&#xff0c;JavaScript作为Web的主力语言&#xff0c;在处理计算密集型任务时仍然存在性能瓶颈。今天&#xff0c;我们来聊一聊可能改变Web格局的技术—…

Hadoop之01:HDFS分布式文件系统

HDFS分布式文件系统 1.目标 理解分布式思想学会使用HDFS的常用命令掌握如何使用java api操作HDFS能独立描述HDFS三大组件namenode、secondarynamenode、datanode的作用理解并独立描述HDFS读写流程HDFS如何解决大量小文件存储问题 2. HDFS 2.1 HDFS是什么 HDFS是Hadoop中的一…