Hive 查询

Hive中查询操作 一、查询语法 查询语句语法: [WITH CommonTableExpression (, CommonTableExpression)*] Only available starting with Hive 0.13.0) SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE wher... 阅读详情

Hive 查询


官网资料: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select

查询语句语法:

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 number]

一、基本查询

数据准备

dept:
10 ACCOUNTING 1700
20 RESEARCH 1800
30 SALES 1900
40 OPERATIONS 1700

emp:
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
7788 SCOTT ANALYST 7566 1987-4-19 3000.00  20
7839 KING PRESIDENT  1981-11-17 5000.00  10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00  20
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

创建表:

create table if not exists dept(
deptno int,
dname string,
loc int)
row format delimited fields terminated by '\t';

create table if not exists emp(
empno int,
ename string,
job string,
mgr int,
hiredate string, 
sal double, 
comm double,
deptno int)
row format delimited fields terminated by '\t';

导入数据:

load data local inpath '/opt/module/datas/dept.txt' into table dept;
load data local inpath '/opt/module/datas/emp.txt' into table emp;

1.1 全表和特定列查询

select * from emp;

select empno,ename from emp;

select empno as no,ename name from emp;
  • 注意:
    • SQL语音大小写不敏感
    • SQL可以写在一行或者多行
    • 关键字不能被缩写也不能被分行
    • 各子句一般分行写
    • 使用缩进提高语句的可读性

1.2 算术运算符

算术运算符

1.3 常用函数

select count(*) cnt from emp;

select max(sal) max_sal from emp;

select min(sal) min_sal from emp;

select sum(sal) sum_sal from emp;

select avg(sal) avg_sal from emp;

1.4 Limit语句

Limit子句会限制返回的行数。

select * from emp limit 5;

1.5 Where语句

where子句紧随from子句。

select * from emp where sal > 1000;

1.6 比较运算符

操作符

例子:

select * from emp where sal = 5000;

select * from emp where sal between 500 and 1000;

select * from emp where comm is null;

select * from emp where sal in (1500, 5000);

1.7 Like和RLike

使用LIKE运算选择满足条件的值。

%:代表零个或多个字符(任意字符)。

_:代表一个字符。

RLike运算可通过Java正则表达式来指定匹配条件。

例子:

# 查找名字以A开头的员工信息
select * from emp where ename like 'A%';

# 查找名字中第二个字母为A的员工信息
select * from emp where ename like '_A%';

# 查找名字中带有A的员工信息
select * from emp where ename rlike '[A]';

1.8 逻辑运算符

逻辑操作符

# 查询薪水大于1000,部门是30的员工信息
select * from emp where sal > 1000 and deptno = 300;

# 查询薪水大于1000,或者部门是30的员工信息
select * from emp where sal > 1000 or deptno = 30;

# 查询除了20部门和30部门以外的员工信息
select * from emp where deptno not in (30,20);

二、分组

2.1 Group By 语句

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

例子:

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

select deptno, job, max(sal) max_sal from emp
group by deptno, job;

2.2 Having 语句

  1. having和where不同点

    1. where后面不能写分组函数,而having后面可以使用分组函数。
    2. having只用于group by分组统计语句。
  2. 例子

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

三、连接join

3.1 等值join

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

3.2 内连接

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

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

3.3 左外连接

左外连接:JOIN 操作符左边表中符合 WHERE 子句的所有记录将会被返回。

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

3.4 右外连接

右外连接:JOIN 操作符右边表中符合 WHERE 子句的所有记录将会被返回。

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

3.5 满外连接

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

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

大多数情况下,Hive 会对每对 JOIN 连接对象启动一个 MapReduce 任务。

优化:当对 3 个表或者更多表进行 join 连接时,如果每个 on 子句都使用相同的连接键的话,那么只会产生一个 MapReduce job。

3.6 笛卡尔积

  • 笛卡尔积产生的条件
    1. 省略连接条件
    2. 连接条件无效
    3. 所有表中的所有行互相连接
  • 例子
select empno,dname from emp, dept;

四、排序

4.1 全局排序

Order By:全局排序,只有一个Reduce。asc(ascend):升序;desc(descend):降序。

select * from emp order by sal;

select * from emp order by sal desc;

select ename, deptno, sal from emp order by deptno, sal desc;

select ename,sal*2 tsal from emp order by tsal;

4.2 每个reduce内部排序—sort by

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

sort by为每个reduce产生一个排序文件。每个reduce内部进行排序,对全局结果集来说不是排序。

# 设置reduce个数
set mapreduce.job.reduces=3;

# 查看reduce个数
set mapreduce.job.reduces;

# 根据部门编号降序查看员工信息
select * from emp sort by deptno desc;

# 将查询结果导入到文件,按照部门标号降序排序
insert overwrite local directory '/opt/data/sortby-result'
select * from emp sort by deptno desc;

4.3 分区—distribute by

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

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

例子:

insert overwrite local directory '/opt/module/data/distribute-result' 
select * from emp 
distribute by deptno 
sort by empno desc;
  • distribute by 的分区规则是根据分区字段的 hash 码与 reduce 的个数进行模除后,余数相同的分到一个区。
  • Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。

4.4 cluster by

当 distribute by 和sorts by 字段相同时,可以使用 cluster by 方式。

cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。但是排序只能是升序排序,不能指定排序规则为 ASC 或者 DESC。

select * from emp distribute by deptno sort by deptno;

select * from emp cluster by deptno;
# 两者等价
Hive查询 任务目标 1.了解Hive的SQL基本语法 2.掌握Hive多种查询方式 阅读详情

相关推荐

Hive查询慢的那点事

当你用jdbc对HiveServer2做一些查询的时候,有时候会遇到一些延时,为了查找原因,我们可以收集jstack dump日志,它可以把Hiveserver2进程的所有线程的callstack打印出来提供你分析,那么如何分析jstack日志呢? 1,一般情况下如果callstack发现有org.apache.thrift.server.TServlet.doPost function,那么就可...

weixin_44953126的博客 6313

Hive使用简单总结

一.Hive介绍 1.1.Hive概述 Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数据文件映射为一张表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。 Hive是建立在 Hadoop 上的数据仓库基础构架。它...

Lonelybrbara的博客 726

hive 子查询特别分析

Hive只支持在FROM子句中使用子查询,子查询必须有名字,并且列必须唯一:SELECT ... FROM(subquery) name ... 确认下是否一定要求列必须唯一?

秋韩 2万+

hive的总结

hive1.2底层使用mapreduce作为计算引擎 hive1.2安装方法 解压apache-hive-1.2.2-bin.tar.gz到/usr/local 添加hive-site.xml到/usr/local/apache-hive-1.2.2-bin/conf 里面的内容是 <configuration> <property> <name>javax.jdo.option.ConnectionURL</name>

qq_63720568的博客 665

Ubuntu Server 24.04 安装 (超详细)

本文介绍最小化安装 Ubuntu Server的详细过程。

炀炀的专栏 1万+

Cursor赋能Qt C++:从环境配置到项目构建的AI开发新范式

本文详细介绍了如何利用Cursor工具链提升Qt C++开发效率,从智能环境配置到CMake项目构建的全流程实践。通过AI辅助编程、Qt生态优化及高级调试技巧,开发者可快速完成从传统开发到AI驱动的新范式转换,显著缩短项目搭建时间并提升代码质量。

weixin_30329623的博客 546

hive设置队列

hive 设置队列 hive 设置队列首先要确定使用的计算引擎是哪个 hive默认使用的是 mr 可以是以下两类:mr 和 tez set hive.execution.engine=mr; set hive.execution.engine=tez; 如果使用的是默认mr: 设置队列: 方法一:hive cli 登录后使用 set mapreduce.job.queuename=queue-name;(新版本) 方法二:h...

XXXL___Huo的博客 8054

BUUCTF reverse题解汇总

BUUCTF平台刷题过程中做的一些逆向题解的总结归类

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1万+

Hive不同引擎下的队列

Hive不同引擎&队列 1.设置不同的执行引擎 1.设置为(mr)MapReduce引擎: set hive.execution.engine=mr; 2.设置为tez引擎: set hive.execution.engine=tez; 3.设置为spark引擎 set hive.execution.engine=spark; 注意:Hive1.X没有spark引擎,Hive3.X没有mr引擎,Hive2.X没印象了。 2.设置不同引擎下的队列 1.如果是默认引擎(mr)MapReduce,那

u012667450的博客 1667

万字详解 PostgreSQL 的详细安装方式(Linux、Windows、macOS、Docker 全平台覆盖)

本文详细介绍了PostgreSQL在四大主流环境下的安装方法: Linux系统:针对Ubuntu/Debian和CentOS/RHEL系,分别提供APT/YUM仓库安装步骤,包括初始化配置和服务管理 Windows系统:通过图形化安装程序指导完成安装,包含组件选择、密码设置和pgAdmin配置 macOS系统:推荐使用Homebrew一键安装,支持Apple Silicon和Intel芯片 Docker容器:提供容器化部署方案(文中未展开) 文章强调安装前的版本选择、权限管理和存储规划,并针对各平台给出验证

数据知道的博客 4493

Python电商网站全站爬虫实战:以京东为例的数据采集与分析

随着电子商务的蓬勃发展,电商数据已成为市场研究、竞争分析和消费者行为研究的重要资源。本文详细介绍了如何使用Python最新技术栈构建一个高效的电商网站全站爬虫,以京东为例实现商品数据的自动化采集。文章涵盖了爬虫的法律与伦理考量、技术选型、反爬虫策略应对、分布式架构设计以及数据存储方案,并提供了完整的代码实现。本爬虫系统采用Scrapy-Redis分布式框架、Selenium动态渲染、智能代理轮换和机器学习验证码识别等先进技术,能够稳定高效地抓取京东全站商品数据,为电子商务研究提供数据支持。关键词。

2201_76125261的博客 413

【Hive】Hive常见问题排查技巧

一、作业慢或者有问题,先看Yarn链接 1.作业Pending问题查看 通常是资源问题 ACCEPTED: waiting for AM container to be allocated 表示AM的资源都没有分配 Pending很多,Running很少 队列资源用满情况分类 队列满了,不一定是vcore满,可能是内存满了,使用不合理都是先把内存用满了 解决办法: 1.杀作业,停止不重要作业,保障优先级 2.加队列资源 队列满的情况,有时候是因为用户内存设置太大,建议业务砍内存 Config

可乐 2703

大模型部署指南:SGLang 框架

本文介绍使用 SGLang 框架部署大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1610

【Hive】Hive 查询

文章目录一、环境准备二、Hive 查询1、普通查询2、别名查询3、限定查询4、多表联合查询5、多表插入6、多目录输出文件 环境准备 Hadoop 完全分布式(一主两从即可) MySQL环境、Hive环境 一、环境准备 将 buyer_log 、buyer_favorite 导入到 /data/hive-data 下: 创建卖家行为日志表,名为 buyer_log,包含ID(id)、用户ID(buyer_id)、时间(dt)、地点(ip)、操作类型(opt_type) 5 个字段,字符类型为..

懂得一千零一种,赋予你失败的方法! 3078

[毕设项目-MCP+ENSP]一句话搞定ENSP自动化:MCP + LLM实战(架构图、工具清单、踩坑全解)

用 MCP + LLM 把“人话”变成对华为 ENSP 的安全自动化操作,三款工具覆盖配置/查询/落盘,配套架构、实战与排坑清单。

逐梦苍穹的博客 2536

华为OD机考双机位C卷 - 风险投资计划(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 风险投资计划(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 546

Hive的查询语句

Hive的查询语句 目录Hive的查询语句一、查询语句语法二、基本查询(Select...from)2.1 全表和特定列查询2.2 列别名2.3 算数运算符2.4 常用函数2.5 Limit语句2.6 Where语句2.7 比较运算符(Between/In/ Is Null)2.8 Like和RLike2.9 逻辑运算符(And/Or/Not)三、分组3.1 Group By语句3.2 Having语句四、Join语句4.1 等值Join4.2 表的别名4.3 连接分类4.4多表连接4.5 笛卡尔积五、排序

weixin_42796403的博客 6024

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HIVE查询

Hive提供了便捷的数据查询功能,这是Hive得到广泛使用的原因之一。Hive的SELECT与关系型数据库的SELECT既有相似之处,也有不同之处。 语法: SELECT [ALL | DISTINCT] select _expr ,select_expr,... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [DISTRIBUTED BY col_list..

Vulpes corsac 317

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Hive 子查询

1.FROM中的子查询 SELECT ... FROM (subquery) name ... SELECT ... FROM (subquery) AS name ... (Note: Only valid starting with Hive 0.13.0) Hive仅在FROM子句中支持子查询(从Hive 0.12版本开始)。必须为子查询指定名称,因为FROM子句中的每个表都必须具有名...

shengpli′s blog 4910

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hive——详细总结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 分区修复

weixin_44606952的博客 4318

HIVE 总结 五 Hive 查询

HIVE 总结 五 Hive 查询 本篇总结hive操作的查询,毕竟在工作中查询才是用的最多的. 而hive的查询基本上跟MySQL的查询是一样的. 文章目录HIVE 总结 五 Hive 查询1.基本查询2.分组查询3.jion4.排序 1.基本查询 语法 SELECT [ALL | DISTINCT] select_expr, select_expr, ...   FROM table_reference   [WHERE where_condition]

千山暮雪CN 3105

Hive查询的18种方式,你都学会了吗?

Hive查询的18种方式,确定不点击进来学习一下吗?

大数据梦想家 5703

Hive之查询

目录 一.查询     1.1 基本查询(Select…From)         1.1.1 全表和特定列查询         1.1.2 列别名         1.1.3 算术运算符    &n.

Movle 7506

HIVE 查询

hive查询以及自定义函数UDF,UDTF,exploded炸裂函数

sheep55的博客 1267
上一篇: Hive DML 数据操作
下一篇: Hive 分区表和分桶表
努力生活的黄先生
博客等级 码龄7年 38粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力生活的黄先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值