1. union语法

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

UNION将多个SELECT语句的结果集合并为一个独立的结果集。当前只能支持UNION ALL(bag union)。不消除重复行。每个select语句返回的列的数量和名字必须一样,否则,一个语法错误会被抛出。

从语法中可以看出UNION有两个可选的关键字:

使用DISTINCT关键字与使用UNION 默认值效果一样,都会删除重复行
使用ALL关键字,不会删除重复行,结果集包括所有SELECT语句的匹配行(包括重复行)

注意

Hive 1.2.0之前的版本仅支持UNION ALL,其中重复的行不会被删除。
Hive 1.2.0和更高版本中,UNION的默认行为是从结果中删除重复的行。

DISTINCT union可以显式使用UNION DISTINCT,也可以通过使用UNION而不使用以下DISTINCT或ALL关键字来隐式生成。

每个select_statement返回的列的数量和名称必须相同。 否则,将抛出错误。

注意

在Hive 0.12.0和更低版本中,UNION只能在子查询中使用,例如“SELECT * FROM(select_statement UNION ALL select_statement)unionResult”。
从Hive 0.13.0开始,UNION也可以在顶级查询中使用:例如“select_statement UNION ALL select_statement UNION ALL ...”。 (见HIVE-6189。)
在Hive 1.2.0之前,仅支持UNION ALL。
Hive 1.2.0以后版本可以支持支持UNION(或UNION DISTINCT)。 (见HIVE-9039。)

2. UNION在FROM子句内

如果还需要对UNION的结果集进行一些其他的处理,整个语句表达式可以嵌入到FROM子句中,如下所示:

SELECT *
FROM (select_statement
  UNION ALLselect_statement
) unionResultAlias

例如,假设我们有两个不同的表分别表示哪个用户发布了一个视频,以及哪个用户发布了一个评论,那么下面的查询将UNION ALL的结果与用户表join在一起,为所有视频发布和评论发布创建一个注释流:

SELECT u.id, actions.date
FROM (SELECT av.uid AS uidFROM action_video avWHERE av.date = '2008-06-03'UNION ALLSELECT ac.uid AS uidFROM action_comment acWHERE ac.date = '2008-06-03') actions JOIN users u ON (u.id = actions.uid)

3. DDL和插入语句的联合

UNION 可以在视图,插入和CTAS(创建表作为select)语句中使用。 查询可以包含多个UNION子句,如上面的语法中所示。

4. Applying Subclauses

如果要对单个SELECT语句应用ORDER BY,SORT BY,CLUSTER BY,DISTRIBUTE BY或LIMIT,请将该子句放在括在SELECT中的括号内:

SELECT key FROM (SELECT key FROM src ORDER BY key LIMIT 10)subq1
UNION
SELECT key FROM (SELECT key FROM src1 ORDER BY key LIMIT 10)subq2

如果要对整个UNION结果应用ORDER BY,SORT BY,CLUSTER BY,DISTRIBUTE BY或LIMIT子句,请在最后一个之后放置ORDER BY,SORT BY,CLUSTER BY,DISTRIBUTE BY或LIMIT。 以下示例使用ORDER BY和LIMIT子句:

SELECT key FROM src
UNION
SELECT key FROM src1
ORDER BY key LIMIT 10

5. 模式匹配的列别名

UNION期望在表达式列表的两侧有相同的模式。 因此,以下查询可能会失败,并显示一条错误消息,例如“FAILED:SemanticException 4:47 union的两边的模式应该匹配”。

INSERT OVERWRITE TABLE target_tableSELECT name, id, category FROM source_table_1UNION ALLSELECT name, id, "Category159" FROM source_table_2

在这种情况下,列别名可使UNION两侧的模式相同:

INSERT OVERWRITE TABLE target_tableSELECT name, id, category FROM source_table_1UNION ALLSELECT name, id, "Category159" as category FROM source_table_2

6. 列类型转换

在2.2.0版本HIVE-14251之前,Hive尝试在Hive类型组(Hive type group)之间执行隐式转换。 随着HIVE-14251的改变,Hive将仅在每个类型组(包括字符串组,数字组或日期组,而不是组间)中执行隐式转换。 为了合并来自不同组的类型,例如字符串类型和日期类型,在查询中需要从字符串到日期或从日期到字符串的显式转换。

SELECT name, id, cast('2001-01-01' as date) d FROM source_table_1
UNION ALL
SELECT name, id, hiredate as d FROM source_table_2

7. Example

aa数据:

hive> select * from tmp_union_aa;
OK
ios aa
ios ab
adr ac
adr ad
adr ad
ios ab

ab数据:

hive> select * from tmp_union_ab;
OK
ios ba
ios bb
adr ac
adr bd
adr bd
ios ab

union all合并:

hive> select * from
(select platform, id from tmp_union_aaunion allselect platform, id from tmp_union_ab
) u;ios aa
ios ab
adr ac
adr ad
adr ad
ios ab
ios ba
ios bb
adr ac
adr bd
adr bd
ios ab

union 合并:

hive>select * from
(select platform, id from tmp_union_aaunionselect platform, id from tmp_union_ab
) u;adr ac
adr ad
adr bd
ios aa
ios ab
ios ba
ios bb

原文:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Union

[Hive]Union使用指南相关推荐

  1. hive性能优化指南

    1.概述 继续<hive性能优化指南--初级篇>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 ...

  2. HADOOP docker(六):hive简易使用指南

    前言 1.hive简介 1.1 hive组件与相应功能: 1.2 hive的表类型 1.3 分区表 1.3 分隔符 1.4 hive的数据存储 2.数据类型 2.1 基本数据类型 2.1 复杂数据类型 ...

  3. Hive union vs union all

    UNION和UNION ALL都将两个不同SQL的结果连接在一起. 差异: UNION删除重复项,而UNION ALL不会删除重复项. UNION操作从结果集中消除了重复的行,但是UNION ALL在 ...

  4. 最强最全面的Hive SQL开发指南,超四万字全面解析!

    本文整体分为两部分,第一部分是简写,如果能看懂会用,就直接从此部分查,方便快捷,如果不是很理解此SQl的用法,则查看第二部分,是详细说明,当然第二部分语句也会更全一些! 第一部分: hive模糊搜索表 ...

  5. hive union all

    实现的是:增加把一个表的所有行添加到另外一个表中,如果二个表一样,那么表A有5行,表B有10行,那么union all 后就是15行 功能:将两个表中的 相同的字段拼接到一起 特点:union all ...

  6. 大数据数据仓库——hive学习权威指南

    友情提示:更多有关大数据.人工智能方面技术文章请关注博主个人微信公众号:大数据分析爱好者社区! 学习hive权威指南 目录: ETL介绍 大数据平台架构概述 系统数据流动 hive概述 hive在ha ...

  7. Hive UDF 函数指南

    精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 Hive 内置了 ...

  8. Hive Union操作中的隐式转换

    语法: select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...

  9. hive union all 使用

    union all 用来合并多个select的查询结果,需要保证select中字段须一致,每个select语句返回的列的数量和名字必须一样,否则,一个语法错误会被抛出. 更多内容可参考:https:/ ...

最新文章

  1. 前Oracle首席工程师怒喷:MySQL 是“超烂的数据库”,建议考虑 PostgreSQL
  2. 从零开始学习Kafka
  3. java备份还原mysql数据库_Java备份还原Mysql数据库
  4. linux vim复制粘贴删除,Linux vim删除、复制、粘贴快捷键
  5. 【SpringCloud】Spring Cloud bus
  6. gps高斯utm_高斯-克吕格投影与UTM投影
  7. 堪比ps的mac修图软件 Pixelmator Pro 2.0.6中文版 支持Silicon M1
  8. JVM 垃圾回收机制和常见的垃圾回收器
  9. java uclinux_Java在基于uclinux的嵌入式系统中的应用
  10. win7计算机管理打开超慢,大师解答win7系统打开资源管理器窗口速度很慢的恢复技巧...
  11. 鸿鹄元数正式加入openGauss社区
  12. 互联网短信网关接口协议
  13. jmeter压测数据库
  14. 关于手册的页码和有效页清单 - LEP
  15. CST2019电磁工作室的简单使用
  16. 查看/修改git用户名密码
  17. 多台linux服务器ssh相互无密码访问
  18. c# 计算圆锥的体积_用C#编写一个程序计算出球,圆柱和圆锥的表面积和体积。...
  19. CF-- 1000A.Codehorses T-shirts
  20. php 提取文字,如何使用PHP从word文档中提取文本内容?

热门文章

  1. 移动H5前端性能优化指南[转]
  2. C语言 素数平方之和
  3. 敏捷开发中Scrum方法
  4. LED数码管仿真显示程序
  5. 力扣算法题—073矩阵置零
  6. JavaScript中的+0与-0
  7. C# 判断字符串是否符合十六进制,八进制,二进制和十进制整数格式的正则表达式...
  8. Activity的管理类
  9. 实验0 了解和熟悉操作系统
  10. 分布式服务框架 dubbo/dubbox 入门示例(转)