当我们想将同一schema的数据组合在一起时,会经常使用set 操作。关系数据库中的常规set操作是INTERSECT、MINUS和UNION/UNION ALL。HQL只支持UNION 和 UNION ALL,二者的区别是UNION ALL不删除重复行,而UNION 会删除重复行。Hive在1.2.0之前只支持UNION ALL。此外,所有的union数据必须有相同的名称和数据类型,否则会执行隐式转换,这可能会导致运行时异常。如果使用了ORDER BY、SORT BY、CLUSTER BY、DISTRIBUTE BY或LIMIT,则它们作用于union后的整个结果集。
union的语法格式如下

select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...

  可以在同一个查询中混合使用UNION ALL和UNION DISTINCT。这种形式的处理方式是,一个DISTINCT union会覆盖其左侧的所有ALL union。一个DISTINCT union可以由UNION DISTINCT显式生成,也可以由不带DISTINCT 或 ALL 关键字的UNION隐式生成。

UNION ALL

> SELECT a.name as nm FROM employee a
UNION ALL -- Use column alias to make the same name for union
SELECT b.name as nm FROM employee_hr b;
+----------+
|  _u1.nm  |
+----------+
| Michael  |
| Will     |
| Shelley  |
| Lucy     |
| Michael  |
| Will     |
| Steven   |
| Lucy     |
+----------+

UNION

> SELECT a.name as nm FROM employee a
UNION -- UNION removes duplicated names and slower
SELECT b.name as nm FROM employee_hr b;
+----------+
|  _u1.nm  |
+----------+
| Lucy     |
| Michael  |
| Shelley  |
| Steven   |
| Will     |
+----------+

Order with UNION

> SELECT a.name as nm FROM employee a
UNION ALL
SELECT b.name as nm FROM employee_hr b
ORDER BY nm;
+----------+
|  _u2.nm  |
+----------+
| Lucy     |
| Lucy     |
| Michael  |
| Michael  |
| Shelley  |
| Steven   |
| Will     |
| Will     |
+----------+

对于其他的set操作如INTERCEPT 和 MINUS,hive并不支持,但可以使用join 或 left join实现

使用 join 实现 intercept

> SELECT a.name 
FROM employee a
JOIN employee_hr b
ON a.name = b.name;
+----------+
|  a.name  |
+----------+
| Michael  |
| Will     |
| Lucy     |
+----------+

使用 left join 实现 minus

> SELECT a.name 
FROM employee a
LEFT JOIN employee_hr b
ON a.name = b.name
WHERE b.name IS NULL;
+----------+
|  a.name  |
+----------+
| Shelley  |
+----------+

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Union
书籍 Apache Hive Essentials Second Edition (by Dayong Du) Chapter 4

欢迎关注博客主页:https://blog.csdn.net/u013411339 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 CSDN博客!本文首发CSDN论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】2021年从零到大数据专家的学习指南(全面升级版)》的面试部分补充。 硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇
文章目录前言一、数据仓库介绍二、Hive基本概念三、Hive的架构原理四、Hive安装部署五、 Hive数据类型六、 DDL数据定义Partition Informationcol_name data_type comment七、 DML数据操作❤ღ( ´・ᴗ・` )比心 你们好我是啊晨 今儿更新hive技术 废话不多说,内容很多选择阅读...
Hive中的SQL方言(创建,查询……)表的创建本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 加粗 Ctrl + B 斜体 Ctrl + I
HQL之union all 与union 的区别union all 与 union 的相同之处union all 与 union 的不同之处实际操作 union all 与 union 的相同之处 使用union all 或者 union时,要求表中的字段类型相同,且字段个数相同 union all 与 union 的不同之处 union all :对两个结果集取并集,结果集不去重; union:对两个结果集取并集,结果集去重 student_pf中的数据如下图所示: select * from
hive依赖于HDFS存储数据,Hive将HQL转换成MapReduce执行,所以说Hive是基于Hadoop的一个数据仓库工具,实质就是一款基于HDFS的MapReduce计算框架,对存储在HDFS中的数据进行分析和管理 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式...
1.Hive架构设计概念 user interface :hive cli,hive client,hwi Hive CLI(hive command line interface):Hive命令行交互模式,默认支持 Hive Client(jdbc/odbc/beeline):Hive jdbc交互模式,外部程序或者服务对接的必选项 HWI (hive web interface):Hive w...
select name,salary,subordinates[0],deductions['State Taxes'],address.state, salary*(1-deductions['Federal Taxes']) from employee; 使用函数:https://www.cnblogs.com/MOBIN/p...
MINUS指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。 MINUS的语法如下: [SQL 语句 1] MINUS [SQL 语句 2]; 我们继续使用一样的例子: Store_Information表格 Store_Name Sale...
如何取量表的差值,在Oracle中可以使用 MINUS 关键词,但在Hive中并没有类似的关键词,但是他提供了 left outer join 语句。 -- 人员表 A 与 人员表 B的差值 select * from A left outer join select * from B on A.user_id = B.user_id where B.user_id is null