Hive——详细总结Hive中各大查询语法

news2024/11/24 17:29:28

✅作者简介:最近接触到大数据方向的程序员,刚入行的小白一枚
🍊作者博客主页:皮皮皮皮皮皮皮卡乒的博客
🍋当前专栏:Hive学习进阶之旅
🍒研究方向:大数据方向,数据汇聚,数据治理
🍎上一篇博文:数据导入和数据导出

文章目录

  • 1. 基础查询
    • 1.1 WHERE、LIMIT、DISTINCT、BETWEEN、IN的使用
    • 1.2 LIKE、GROUP BY、HAVING的使用
    • 1.3 内连接&外连接【JOIN...ON ...】
  • 2. 排序查询
    • 2.1 全局排序(Order By)
    • 2.2 单个 Reduce 内部排序(Sort By)
    • 2.3 分区(Distribute By)
    • 2.4 Cluster By
  • 3. 分区表
    • 3.1 分区表介绍
    • 3.2 创建分区表以及分区表的查询操作
    • 3.3 分区修复

1. 基础查询

查询语法

[WITH CommonTableExpression (, CommonTableExpression)*]    (Note: Only available starting with Hive 0.13.0)
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
  FROM table_reference
  [WHERE where_condition]
  [GROUP BY col_list]
  [ORDER BY col_list]
  [CLUSTER BY col_list
    | [DISTRIBUTE BY col_list] [SORT BY col_list]
  ]
 [LIMIT [offset,] rows]

1.1 WHERE、LIMIT、DISTINCT、BETWEEN、IN的使用

WHERE官方文档:
在这里插入图片描述

  • WHERE
    • 功能:使用 WHERE 子句,将不满足条件的行过滤掉
    • 操作:WHERE 子句紧随 FROM 子句

LIMIT官方文档:

在这里插入图片描述

  • LIMIT
    • 功能: LIMIT 子句用于限制返回的行数。
    • 操作:通常放在查询语句的最后一行。

DISTINCT官方文档:

在这里插入图片描述

  • DISTINCT
    • 功能: 返回不同字段的数据。
    • 操作:通常放在查询语句字段前。

  • BETWEEN
    • 功能: 配合WHERE作为过滤条件使用。
    • 操作:通常放在查询语句尾部。
 select * 
 from emp 
 where sal between 500 and 1000; 
  • IN
    • 功能: 配合WHERE作为过滤条件使用。
    • 操作:通常放在查询语句尾部。
select * 
from emp 
where sal 
IN (1500, 5000);  

1.2 LIKE、GROUP BY、HAVING的使用

HAVING官方文档:
在这里插入图片描述

  • Having
    • 功能: 放在句末,作为过滤条件,可以跟函数。
    • 操作:通常放在查询语句尾部。

  • GROUP BY
    • 功能:通过字段将表进行分组
    • 操作:放在查询末尾,根据需求进行分组查询

eg:计算 emp 表每个部门的平均工资

select t.deptno, avg(t.sal) avg_sal 
from emp t 
group by   t.deptno;   

  • LIKE
    • 功能:进行模糊查询,使用 LIKE 运算选择类似的值。
    • 操作:选择条件包含:
      • % 代表零个或多个字符(任意个字符)。
      • _ 代表一个字符。

eg1:查找名字以 A 开头的员工信息

select * 
from emp 
where ename LIKE 'A%';       

eg2:查找名字中第二个字母为 A 的员工信息

select * 
from emp 
where ename LIKE '_A%';                 	

eg3:查找名字中带有 A 的员工信息

 select * 
 from emp 
 where ename RLIKE '[A]';     

1.3 内连接&外连接【JOIN…ON …】

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

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

  • 外连接神图
    • 左外连接:公共部分+左表独有
    • 右外连接:公共部分+右表独有
    • 满外连接:两个表所有数据
    • 左外连接除公共部分:过滤时使用:where B.field IS NULL
    • 右外连接除公共部分:过滤时使用:where A.field IS NULL
    • 两个表独有部分::过滤时使用:full join + where A.field IS NULL and B.field IS NULL

在这里插入图片描述

说明:
    以下查询是基于两张表实现的,一张是员工表:员工姓名,员工编号,员工部门编号;一张是部门表:部门编号,部门名称,使用部门编号来连接两张表

    分别依次实现:左外,右外、左外除去公共部分,右外除去公共部分、满外连接、两张表除公共部分

select e.empno, e.ename, d.deptno 
from emp e 
left join dept d 
on e.deptno = d.deptno;  

select e.empno, e.ename, d.deptno 
from emp e 
right join dept d
on e.deptno = d.deptno;  

select e.empno,e.ename,e.deptno,d.dname 
from emp e 
left join dept d 
on e.deptno = d.deptno 
where d.deptno is null;

select e.empno,e.ename,e.deptno,d.dname 
from emp e 
right join dept d 
on e.deptno = d.deptno 
where d.deptno is null;

select e.empno,e.ename,nvl(e.deptno,d.deptno),d.dname 
from emp e 
full join dept d 
on e.deptno = d.deptno;

select e.empno,e.ename,e.deptno,d.deptno,d.dname 
from emp e
full join dept d
on e.deptno = d.deptno
where e.deptno is null or d.deptno is null;

2. 排序查询

2.1 全局排序(Order By)

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

  • 针对一个字段对全表进行排序
    • ASC (ascend) : 升序 (默认)
    • DESC (descend) : 降序

在这里插入图片描述

2.2 单个 Reduce 内部排序(Sort By)

     Sort By:对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by。
    Sort by 为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集 来说不是排序。通常结合Order By使用

2.3 分区(Distribute By)

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

     对于 distribute by 进行测试,一定要分配多 reduce 进行处理, 否则无法看到 distribute by 的效果。

对每个部门的员工,按照部门编号进行排序展示:

select * 
from emp 
distribute by deptno 
sort by empno desc;

在这里插入图片描述

2.4 Cluster By

在这里插入图片描述

3. 分区表

3.1 分区表介绍

    分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹, 该文件夹下是该分区所 有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据 集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率 会提高很多。

3.2 创建分区表以及分区表的查询操作

创建分区表:

create table dept_partition(                              
deptno int, dname string, loc string                                     
)
partitioned by (day string)
row format delimited fields terminated by '\t';

创建二级分区(将分区在进行细分):

create table dept_partition2(                            		
deptno int, dname string, loc string )                                                            	
partitioned by (day string, hour string)                     			
row format delimited fields terminated by '\t'; 

分区字段在:partitioned by后面出现

区分区表加载数据:
将数据添加到三个分区

load data local inpath 
'/opt/module/hive/datas/dept_20200401.log' 
into table dept_partition 
partition(day='20200401');

 load data local inpath 
'/opt/module/hive/datas/dept_20200402.log'
 into table dept_partition 
partition(day='20200402');

 load data local inpath 
'/opt/module/hive/datas/dept_20200403.log'
 into table dept_partition 
partition(day='20200403');

在这里插入图片描述

查询分区数据:

select * 
from dept_partition 
where day='20200401';

分区操作:

在这里插入图片描述

3.3 分区修复

分区修复的原因:
    把数据直接上传到分区目录上,让分区表和数据没有产生关联,也就是说没有元数据,对应表和实际存放数据的映射

  • 方式一:
    • 上传数据,并且创建表完成
    • 执行修复命令:msck repair table dept_partition2;
  • 方式二:
    • 上传数据后添加分区
    • 手动添加分区:alter table dept_partition2 add partition(day=‘201709’,hour=‘14’);
  • 方式三:
    • 创建文件夹
    • 使用load命令加载数据到HDFS

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

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

相关文章

单隐层神经网络在Matlab上实现及其简单应用

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

Kafka 认证三:添加 Kerberos 认证详细流程

背景 上一章节介绍了 Kerberos 服务端和客户端的部署过程,本章节继续介绍 Kafka 添加 Kerberos 认证的部署流程,及 Java API 操作的注意事项。 sasl.kerberos.service.name 配置的含义 Kafka 添加 Kerberos 部署的核心是 Kafka 服务端的 Principal 配…

基于gensim实现word2vec模型(附案例实战)

目录 什么是word2vec? Word2Vec的原理 gensim实现word2vec模型(实战) 什么是word2vec? Word2Vec是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的…

20+个很棒的 Python 脚本的集合(迷你项目)

💂 个人网站:【海拥】【摸鱼小游戏】【神级源码资源网站】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】💬 免费且实用的 前…

【软件分析第17讲-学习笔记】程序综合 Program Synthesis

文章目录前言正文程序综合枚举法CEGIS:基于反例的优化约束求解法启发式搜索法统计法基于组件的程序综合 Component-Based Synthesis小结参考文献前言 创作开始时间: 如题,学习一下程序综合 Program Synthesis的相关知识。参考:熊…

AUTOSAR-Fee模块

(73条消息) AUTOSAR-Fee模块_一ye残雪的博客-CSDN博客_fee 配置 0 前言 Fee模块全称Flash EEPROM Emulation Module,属于ECU抽象层 Fee模块本身是脱离硬件的,但是Fee模块可能会引用的Fls模块定制API,所以只能算半抽象 本文中,由于…

数据库高级 III

数据库高级 III 二叉排序树在极端情况下存在的问题 二叉排序树在极端情况下会产生失衡二叉树 失衡二叉树其实是不希望存在的,因为它失去了二叉排序树的查询优势,现在这种失衡二叉树的查询效率和单向链表一样,此时它就是单向链表 数据结构…

14.4、SpringWebFlux-1

14.4、SpringWebFlux-1 14.4.1、前置知识 SpringMVC,SpringBoot,Maven,Java8 新特性 14.4.2、基本介绍 官方文档 Web on Reactive Stack (spring.io) 是 Spring5 添加新的模块,用于 web 开发的,功能 SpringMVC 类…

网络热传App鉴定 |「得物」疑私删用户视频?从技术角度还原事件始末

声明:本文更注重于原理知识的普及,因此文中不会有大量实际代码的展示,如果想从代码层面上了解「应用存储分区」的内容,欢迎阅读我两年前写过的技术文章《Android 10 应用分区存储适配实践》 近日,有网友爆料&#xff0…

MySQL 分库分表

MySQL分库分表 概念 读写分离优化了互联网读多写少场景下的性能问题,考虑一个业务场景,如果读库的数据规模非常大,除了增加多个从库之外,还有其他的手段吗?实现数据库高可用,还有另外一个撒手锏&#xff…

Python性能优化指南--让你的Python代码快x3倍的秘诀

Python性能优化指南 Python最为人诟病的就是其执行速度。如何让Python程序跑得更快一直是Python核心团队和社区努力的方向。作为Python开发者,我们同样可以采用某些原则和技巧,写出性能更好的Python代码。本文将带大家深入探讨Python程序性能优化方法。…

99页4万字XX大数据湖项目建设方案

目 录 1. 项目综述 1.1. 项目背景 1.2. 项目目标 1.3. 项目建设路线 2 需求分析 2.1功能需求 2.1.1 统一数据接入 2.1.2 数据迁移 2.1.3 数据范围与ETL 2.1.4 报表平台 2.1.5 安全管理 2.1.6 数据治理 2.2非功能需求 2.2.1运维保障需求 2.2.2可用性需求 2.2.3可…

MQTT 具备那些特征?

目录 1、MQTT 中的 QoS(消息服务质量) (1)为什么服务质量(QoS)很重要? (2)QoS 在 MQTT 中是如何工作的? (3)如何选择正确的 QoS 级别 (4&a…

Java开发中Word转PDF文件5种方案横向评测

Java开发中Word转PDF文件5种方案横向评测 前段时间接了个项目,需要各种处理Word模板、转PDF、签章等等,非常头疼,其中光是一个word转PDF就折磨我好久,实现转换很简单,但是效果总是达不到满意,于是我把市面…

【Linux】关于普通用户无法使用sudo指令的解决方案

文章目录前言解决方案结语前言 在这篇博客中,测试 rm -rf 删除文件时无视权限暴力删除的效果时,使用了 sudo 指令。 但是sudo指令是不能直接使用的,需要修改一些设置。 当时我遇到这个问题时,困惑了许久,查找解决方…

JVM执行引擎

文章目录学习资料执行引擎概述工作过程Java代码编译和执行的过程什么是解释器(Interpreter),什么是JIT编译器?为什么说Java是半编译半解释型语言?机器码、指令、汇编语言、高级语言机器码指令指令集汇编语言高级语言字…

UE5实现PS图层样式投影效果

一、PS图层样式投影效果 1、创建材质函数 MF_PS_Style_Shadow 公开到库(可选) 定义 function input。 Shadow代码: /** PS图层样式投影效果param {UVs} texture coordinateparam {TextureObject} texture objectparam {TextureSize} …

十、children的深入用法-React.Children对象上的方法

目标 理解什么是children掌握React.Children对象上的方法 知识点 什么是children上图中我们看到了,我们之前学过的React.createElement方法,现在大家发现jsx的内容,全部都体现在了该方法上;那么React.createElement其实是有三个…

专精特新企业数据集两份数据

专精特新企业数据集 一、三批专精特新上市、非上市公司数据分布 1、时间截止至2021年8月 2、区域范围:上市和非上市公司两大板块,涵盖申万一级行业 3、指标说明: 包含如下内容:专精特新上市公司名单汇总、第一批专精特新上市公…

opencv 入门学习

opencv 演示 输入说明 原图在顶层后然后再去按键,不然会失效(未知原因) 1.roberts 边缘检测 2.sobel算子 3.Canny算子 4.Laplace算子 5.Canny算子,轮廓显示 空格 人脸检测准备一张图片效果 默认显示原图和灰阶图 roberts 边缘…