Hive查询操作详解

news2024/12/23 5:35:41

Hive

数据准备:
在这里插入图片描述
在这里插入图片描述
Tips:
(1)SQL 语言大小写不敏感。
(2)SQL 可以写在一行或者多行。
(3)关键字不能被缩写也不能分行
(4)各子句一般要分行写。
(5)使用缩进提高语句的可读性。

1.基本查询(select…from)

1.全表和特定列查询

- 全表查询

hive (default)> select * from emp;

在这里插入图片描述

- 特定列查询

select empno, ename from emp;

在这里插入图片描述

2.列别名

  • 重命名一个列
  • 便于计算
  • 紧跟列名,也可以在列名和别名之间加入关键字‘AS’
 hive (default)> 
select 
    ename AS name, 
    deptno dn 
from emp;

在这里插入图片描述

3.Limit语句

典型的查询会返回多行数据。limit子句用于限制返回的行数。

hive (default)> select * from emp limit 5; 

在这里插入图片描述

hive (default)> select * from emp limit 2,3; -- 表示从第2行开始,向下抓取3行

在这里插入图片描述

4.Where语句

  • 使用where子句,将不满足条件的行过滤掉
  • where子句紧随from子句
查询出薪水大于1000的所有员工。
hive (default)> select * from emp where sal > 1000;

注意:where子句中不能使用字段别名。
在这里插入图片描述

5.关系运算函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

select ename,sal from where sal between 1000 and 2000;

在这里插入图片描述

select ename,job from emp where job is  null;

在这里插入图片描述

select ename from emp where ename like '小%';

在这里插入图片描述

select ename from emp where ename like '小_';

在这里插入图片描述


6.逻辑运算函数

and	逻辑并
or	逻辑或
not	逻辑否

(1)查询薪水大于1000,部门是30

hive (default)> 
select 
    * 
from emp 
where sal > 1000 and deptno = 30;

(2)查询薪水大于1000,或者部门是30

hive (default)> 
select 
    * 
from emp 
where sal>1000 or deptno=30;

(3)查询除了20部门和30部门以外的员工信息

hive (default)> 
select 
    * 
from emp 
where deptno not in(30, 20);

7.聚合函数

  • count(*),表示统计所有行数,包含null值;
  • count(某列),表示该列一共有多少行,不包含null值;
  • max(),求最大值,不包含null,除非所有值都是null;
  • min(),求最小值,不包含null,除非所有值都是null;
  • sum(),求和,不包含null。
  • avg(),求平均值,不包含null。

(1)求总行数(count)

hive (default)> select count(*) cnt from emp;

在这里插入图片描述
在这里插入图片描述

(2)求工资的最大值(max)

hive (default)> select max(sal) max_sal from emp;

在这里插入图片描述
在这里插入图片描述

(3)求工资的最小值(min)

hive (default)> select min(sal) min_sal from emp;

在这里插入图片描述

(4)求工资的总和(sum)

hive (default)> select sum(sal) sum_sal from emp; 

在这里插入图片描述

(5)求工资的平均值(avg)

hive (default)> select avg(sal) avg_sal from emp;

在这里插入图片描述
在这里插入图片描述


2.分组查询(group by)

having与where不同点

  • where后面不能写分组聚合函数,而having后面可以使用分组聚合函数
  • having只用于group by分组统计语句
  • where分组前过滤,having分组后过滤

(1)求每个部门的平均薪水

hive (default)> 
select 
    deptno, 
    avg(sal) 
from emp 
group by deptno;

在这里插入图片描述
在这里插入图片描述

(2)求平均薪水大于2000的部门。

hive (default)>
select 
    deptno, 
    avg(sal) avg_sal 
from emp 
group by deptno  
having avg_sal > 2000;

在这里插入图片描述
在这里插入图片描述


3.联合查询(Join)

Hive支持通常的sql join语句,支持等值连接,也支持非等值连接。

(1)根据员工表和部门表中的部门编号相等,查询员工编号、员工名称和部门名称。

hive (default)> 
select 
    e.empno, 
    e.ename, 
    d.dname 
from emp e --重命名
join dept d 
on e.deptno = d.deptno; --员工表和部门表中的部门编号相等

表的别名

  • 使用别名可以简化查询。
  • 区分字段的来源

在这里插入图片描述
在这里插入图片描述
(2)合并员工表和部门表。

hive (default)> 
select 
    e.*,
    d.* 
from emp e 
join dept d 
on e.deptno = d.deptno;

在这里插入图片描述


在这里插入图片描述

内连接

内连接:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来

hive (default)> 
select 
    e.empno, 
    e.ename, 
    d.deptno 
from emp e 
join dept d 
on e.deptno = d.deptno;

在这里插入图片描述


左外连接

join操作符左边表中符合where子句的所有记录将会被返回

hive (default)> 
select 
    e.empno, 
    e.ename, 
    d.deptno 
from emp e 
left join dept d 
on e.deptno = d.deptno;

在这里插入图片描述

右外连接

join操作符右边表中符合where子句的所有记录将会被返回。

hive (default)> 
select 
    e.empno, 
    e.ename, 
    d.deptno 
from emp e 
right join dept d 
on e.deptno = d.deptno;

在这里插入图片描述


满外连接

将会返回所有表中符合where语句条件的所有记录。如果任一表的指定字段没有符合条件的值的话,那么就使用null值替代。

hive (default)> 
select 
    e.empno, 
    e.ename, 
    d.deptno 
from emp e 
full join dept d 
on e.deptno = d.deptno;

在这里插入图片描述

多表连接

  • 连接n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。
    在这里插入图片描述
    多表连接查询:
hive (default)> 
select 
    e.ename, 
    d.dname, 
    l.loc_name
from emp e 
join dept d
on d.deptno = e.deptno 
join location l
on d.loc = l.loc;

在这里插入图片描述

  • 大多数情况下,Hive会对每对join连接对象启动一个MapReduce任务。本例中会首先启动一个MapReduce job对表e和表d进行连接操作,然后会再启动一个MapReduce job将第一个MapReduce job的输出和表l进行连接操作。
  • 注意:为什么不是表d和表l先进行连接操作呢?这是因为Hive总是按照从左到右的顺序执行的。

笛卡尔积

笛卡尔集会在下面条件下产生

  • 省略连接条件
  • 连接条件无效
  • 所有表中的所有行互相连接
hive (default)> 
select 
    empno, 
    dname 
from emp, dept;

在这里插入图片描述

联合(union & union all)

  • unionunion all都是上下拼接sql的结果,这点是和join有区别的,join是左右关联,union和union all是上下拼接。
  • union去重,union all不去重。
  • union和union all在上下拼接sql结果时有两个要求:
    (1)两个sql的结果,列的个数必须相同
    (2)两个sql的结果,上下所对应列的类型必须一致

将员工表30部门的员工信息和40部门的员工信息,利用union进行拼接显示。

hive (default)> 
select 
    *
from emp
where deptno=30
union
select 
    *
from emp
where deptno=40;

在这里插入图片描述


4.排序

全局排序(Order By)

Order By:全局排序,只有一个Reduce。

  • 使用Order By子句排序
    asc(ascend):升序(默认)
    desc(descend):降序
  • Order By子句在select语句的结尾

(1)查询员工信息按工资升序排列

hive (default)> 
select 
    * 
from emp 
order by sal;

在这里插入图片描述

在这里插入图片描述
(2)查询员工信息按工资降序排列

hive (default)> 
select 
    * 
from emp 
order by sal desc;

在这里插入图片描述

(3)按照别名排序

  • 按照员工薪水的2倍排序。
hive (default)> 
select 
    ename, 
    sal * 2 twosal 
from emp 
order by twosal;

在这里插入图片描述

在这里插入图片描述

(4)多个列排序案例

按照部门和工资升序排序。

hive (default)> 
select 
    ename, 
    deptno, 
    sal 
from emp 
order by deptno, sal;

在这里插入图片描述
在这里插入图片描述


每个Reduce内部排序(Sort By)

  • Sort By:对于大规模的数据集order by的效率非常低。在很多情况下,并不需要全局排序,此时可以使用Sort by。

  • Sort by为每个reduce产生一个排序文件

  • 每个Reduce内部进行排序,对全局结果集来说不是排序。

1)设置reduce个数

hive (default)> set mapreduce.job.reduces=3;

2)查看设置reduce个数

hive (default)> set mapreduce.job.reduces;

3)根据部门编号降序查看员工信息

hive (default)> 
select 
    * 
from emp 
sort by deptno desc;

每个Reduce内部进行排序,对全局结果集来说不是排序(局部有序)。
在这里插入图片描述
在这里插入图片描述
4)将查询结果导入到文件中(按照部门编号降序排序)

hive (default)> insert overwrite local directory '/opt/module/hive/datas/sortby'
 select * from emp sort by deptno desc;

在这里插入图片描述

每个reduce内有序。

在这里插入图片描述

分区(Distribute By)

  • Distribute By:在有些情况下,我们需要控制某个特定行应该到哪个Reducer,通常是为了进行后续的聚集操作。
  • distribute by子句可以做这件事。distribute by类似MapReduce中partition(自定义分区),进行分区,结合sort by使用。

(1)先按照部门编号分区,再按照员工薪资排序

  • 对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。
hive (default)> set mapreduce.job.reduces=3;
select 
    * 
from emp 
distribute by deptno 
sort by sal desc;
  • distribute by的分区规则是根据分区字段的hash码与reduce的个数进行相除后,余数相同的分到一个区。
  • Hive要求distribute by语句要写在sort by语句之前
  • 注意:按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去
    在这里插入图片描述

在这里插入图片描述

分区排序(Cluster By)

  • 当distribute by和sort by字段相同并且升序时,可以使用cluster by方式。
  • cluster by除了具有distribute by的功能外还兼具sort by的功能
  • 但是排序只能是升序排序,不能指定排序规则为asc或者desc

(1)以下两种写法等价

hive (default)> 
select 
    * 
from emp 
cluster by deptno;

hive (default)> 
select 
    * 
from emp 
distribute by deptno 
sort by deptno;

注意:按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Science Robotics 美国斯坦福大学研制了外行星洞穴探测机器人

月球和火星上的悬崖、洞穴和熔岩管已被确定为具有地质和天体生物学研究理想地点。由于其隔绝特性,这些洞穴提供了相对稳定的条件,可以促进矿物质沉淀和微生物生长。在火星上,这些古老的地下环境与火星表面可能适合居住时几乎没有变化&#xf…

人工智能热度攀升市场广阔 业内:人机协同将成发展主流

以下文章来源:央广网 今年以来,人工智能产业热度持续攀升。文生视频软件Sora、文生音乐软件Suno等人工智能应用不断涌现,带给人们冲击的同时,也在影响着千行百业。本报今起推出“聚焦人工智能发展”系列报道,围绕人工智…

MybatisPlus(简单CURD,MP的实体类注解,MP条件查询,MP分页查询,MP批量操作,乐观锁,代码生成器)

目录 一、MP入门 1. MP是什么 2. MP使用入门 1 说明 2 准备MP项目环境 1) 添加依赖 2) 创建配置文件 3) 创建引导类 3 MP使用入门 1 创建实体类 2 创建Mapper 3 使用测试 3. 小结 二、MP简单CURD【重点】 1. 说明 2. 示例 3. 小结 三、MP的实体类注解[重点] …

接口测试-笔记

Date 2024年4月23日21:19:51 Author KarrySmile 1. 前言 因为想更加规范地开发接口,同时让自己测试接口的时候更加高效,更好地写好接口文档。所以学习黑马的《接口自动化测试》课程。链接:黑马程序员软件测试接口自动化测试全套视频教程&a…

【Ant-Desgin-React 穿梭框】表格穿梭框,树穿梭框的用法

Antd Desgin 穿梭框 普通用法高级用法-表格穿梭框组件高级用法-树穿梭框组件 普通用法 /* eslint-disable no-unused-vars */ import React, { useEffect, useState } from react import { Space, Transfer } from antd// Antd的穿梭框组件Mock数据 const mockData Array.fro…

企业微信hook接口协议,ipad协议http,外部联系人图片视频文件下载

外部联系人文件下载 参数名必选类型说明file_id是StringCDNkeyopenim_cdn_authkey是String认证keyaes_key是Stringaes_keysize是int文件大小 请求示例 {"url": "https://imunion.weixin.qq.com/cgi-bin/mmae-bin/tpdownloadmedia?paramv1_e80c6c6c0cxxxx3544d9…

分类分析|KNN分类模型及其Python实现

KNN分类模型及其Python实现 1. KNN算法思想2. KNN算法步骤2.1 KNN主要优点2.2 KNN主要缺点 3. Python实现KNN分类算法3.1 自定义方法实现KNN分类3.2 调用scikit-learn模块实现KNN分类 4. K值的确定 在之前文章 分类分析|贝叶斯分类器及其Python实现中,我们对分类分…

Golang基础5-指针、结构体、方法、接口

指针 和c/c类似,但是go语言中指针不能进行偏移和运算,安全指针 &(取地址) *(根据地址取值) nil(空指针) make和new之前对比:make用于初始化slice,map,channel这样的引用类型 而new用于类…

Netty学习——实战篇5 Netty 心跳监测/WebSocket长连接编程 备份

1 心跳监测 MyServer.java public class MyServer {public static void main(String[] args) {NioEventLoopGroup bossGroup new NioEventLoopGroup(1);NioEventLoopGroup workerGroup new NioEventLoopGroup();try {ServerBootstrap serverBootstrap new ServerBootstrap…

CPDA|0到1突破:构建高效数据分析体系的秘密武器

在现今信息爆炸的时代,数据已经渗透到了我们生活的方方面面,成为了决策、创新和竞争优势的关键。因此,构建一套高效的数据分析体系,对于企业和个人而言,都是至关重要的。那么,如何在众多的数据海洋中脱颖而…

一文读懂Partisia Blockhain:兼顾去中心化、安全性与可扩展性

“Partisia Blockhain 解决了区块链领域长期存在的问题,其兼顾了去中心化、安全性以及可扩展性” Partisia Blockchain 是一个具有独特零知识证明预言机以及分片解决方案的 Layer1,解决了困扰整个区块链行业的问题。 目前,多样化的区块链层出…

软考-论文写作-论软件设计模式

题目 素材 框架 一、 摘要 2020年12月,我参加了某省政协委员履职系统的开发。该系统为政协机关人员管理委员信息以及委员完成各项履职提供了全方位的软件支撑。我在该项目重担任系统架构师一职,负责履职系统的架构设计。本文结合作者的实践,以委员履职系统为例,主要讨论软…

计算机网络-IS-IS基础配置实验

前面我们了解了IS-IS的一些基础理论,从建立邻接、链路状态数据库同步以及路由计算,现在开始学习下配置操作。 一、IS-IS配置 网络拓扑图: 拓扑图 IS-IS有Level级别的区分,Level-1可以是性能较低的设备只维护区域内的LSDB&#xff…

035——从GUI->Client->Server->driver实现SPI控制DAC芯片

目录 1、修改GUI 2、修改client 3、server编写 4、driver_handle 5、test 6、 项目管理 1、修改GUI 我想让DAC控制是个滑动条 import PySimpleGUI as sgdef slider_callback(slider_value):print(fCurrent value: {slider_value})layout [[sg.Text(Select a value:)],…

百篇博客 · 千里之行

时光荏苒流逝,白驹匆匆过隙,不知不觉间,Damon小智已经在CSDN上记录了第一百多篇文章。恰逢128天创作纪念日的此刻,我感慨良多,这百余篇博客不仅是我的创作历程,更见证了我在这五年技术生涯中走过心路历程。…

imx6ull -- SPI

SPI 是 Motorola 公司推出的一种同步串行接口 技术,是一种高速、全双工的同步通信总线, SPI 时钟频率相比 I2C 要高很多,最高可以工作 在上百 MHz。 SPI 以主从方式工作,通常是有一个主设备和一个或多个从设备,一般 SP…

【网页在线小游戏源码】

网页在线小游戏源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 index.html <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <meta id"viewport" na…

Hive——DML(Data Manipulation Language)数据操作语句用法详解

DML 1.Load Load语句可将文件导入到Hive表中。 hive> LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1, partcol2val2 ...)];关键字说明&#xff1a; local&#xff1a;表示从本地加载数据到Hive表&#xff1b;否则从HD…

SpringBoot学习之Redis下载安装启动【Windows版本】(三十六)

一、下载Redis for Windows Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub 来下载安装包,下载地址:https://github.com/tporadowski/redis/releases 1、网站提供了安装包和免安装版本,这里我们直接选择下面的免安装版本 2、下载后的压缩包解压以后,如下…