Hive SQL 分组与连接操作详解

2024-09-07 03:04

本文主要是介绍Hive SQL 分组与连接操作详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

分组

Group By语句

1. 案例实操

 Having语句

1. having 与 where 不同点

2. 案例实操

 Join语句

 等值Join

1. 案例实操

 表的别名

1. 好处

2. 案例实操

 内连接

 左外连接

 右外连接

 满外连接

 多表连接

1. 创建位置表

2. 导入数据

3. 多表连接查询

 笛卡尔集

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

2. 案例实操

 联合(union & union all)

1. union & union all 上下拼接

2. 案例实操


分组

Group By语句

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

1. 案例实操
  1. 计算 emp 表每个部门的平均工资

    SELECT t.deptno, AVG(t.sal) avg_sal 
    FROM emp t 
    GROUP BY t.deptno;
  2. 计算 emp 每个部门中每个岗位的最高薪水

    SELECT t.deptno, t.job, MAX(t.sal) max_sal 
    FROM emp t 
    GROUP BY t.deptno, t.job;

 Having语句

1. having 与 where 不同点
  1. where 后面不能写分组聚合函数,而 having 后面可以使用分组聚合函数。
  2. having 只用于 group by 分组统计语句。
2. 案例实操
  1. 求每个部门的平均薪水大于2000的部门

     

    ① 求每个部门的平均工资

    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;

 Join语句

 等值Join

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

1. 案例实操
  1. 根据员工表和部门表中的部门编号相等,查询员工编号、员工名称和部门名称
    SELECT e.empno, e.ename, d.dname 
    FROM emp e 
    JOIN dept d 
    ON e.deptno = d.deptno;

 表的别名

1. 好处
  1. 使用别名可以简化查询。
  2. 区分字段的来源。
2. 案例实操

合并员工表和部门表。

SELECT e.*, d.* 
FROM emp e 
JOIN dept d 
ON e.deptno = d.deptno;

 内连接

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

SELECT e.empno, e.ename, d.deptno 
FROM emp e 
JOIN dept d 
ON e.deptno = d.deptno;

 左外连接

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

SELECT e.empno, e.ename, d.deptno 
FROM emp e 
LEFT JOIN dept d 
ON e.deptno = d.deptno;

 右外连接

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

SELECT e.empno, e.ename, d.deptno 
FROM emp e 
RIGHT JOIN dept d 
ON e.deptno = d.deptno;

 满外连接

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

SELECT e.empno, e.ename, d.deptno 
FROM emp e 
FULL JOIN dept d 
ON e.deptno = d.deptno;

 多表连接

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

1. 创建位置表
CREATE TABLE IF NOT EXISTS location (loc INT,      -- 部门位置idloc_name STRING  -- 部门位置
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
2. 导入数据
LOAD DATA LOCAL INPATH '/opt/module/hive/datas/location.txt' INTO TABLE location;
3. 多表连接查询
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 总是按照从左到右的顺序执行的。

 笛卡尔集

1. 笛卡尔集会在下面条件下产生
  1. 省略连接条件
  2. 连接条件无效
  3. 所有表中的所有行互相连接
2. 案例实操
SELECT empno, dname 
FROM emp, dept;

 联合(union & union all)

1. union & union all 上下拼接

unionunion all 都是上下拼接 SQL 的结果,这点是和 join 有区别的,join 是左右关联,unionunion all 是上下拼接。union 去重,union all 不去重。

unionunion all 在上下拼接 SQL 结果时有两个要求:

  1. 两个 SQL 的结果,列的个数必须相同
  2. 两个 SQL 的结果,上下所对应列的类型必须一致
2. 案例实操

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

SELECT *
FROM emp
WHERE deptno = 30
UNION
SELECT *
FROM emp
WHERE deptno = 40;

这篇关于Hive SQL 分组与连接操作详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143875

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份