大数据入门基础系列之详谈Hive 复合数据类型之联合union

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

在前面的博文里,我已经介绍了

敲黑板,划重点

在前面的博文里,我首先详细撰写分享了

Hive复杂类型包括ARRAY, MAPS, STRUCT, UNION,这些复杂类型是由基础类型组成的。

见官网

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

Complex Types

arrays: (Note: negative values and non-constant expressions are allowed as of Hive 0.14.)

maps: (Note: negative values and non-constant expressions are allowed as of Hive 0.14.)

structs:

union: (Note: Only available starting with Hive 0.7.0.)

Hive提供了4种复合数据类型:

在Hive中可以使用复合数据类型,有三种常用的类型:Array 数组,Map 字典,Struct结构。

Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT,我们可以通过c.a来访问域a。

Maps(K-V对):访问指定域可以通过["指定域名称"]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M['group']来获取。

Arrays:array中的数据为相同类型,例如,假如array A中元素['a','b','c'],则A[1]的值为'b' 。

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

复杂类型:

Array : 该集合中的所有元素的类型和意义都一致 (指定元素的类型)

array(key,value1,key2,value2,....)

Map : 键值对的keyvalue类型,泛型

Struct : address struct

union: 解决以上三种复杂类型的嵌套使用问题

UNION:

UNIONTYPE,他是从Hive 0.7.0开始支持的。

1. union语法

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

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

注意:

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

注意:

2. UNION在FROM子句内

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

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

3. DDL和插入语句的联合

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

4. Applying Subclauses

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

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

5. 模式匹配的列别名

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

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

6. 列类型转换

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

7. Example

aa数据:

ab数据:

union all合并:

union 合并:

http://www.cnblogs.com/zlslch/http://www.cnblogs.com/lchzls/

http://www.cnblogs.com/sunnyDream/

看完本文有收获?请转发分享给更多人

关注「大数据躺过的坑」,提升大神技能

觉得不错,请点赞和留言

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180114G0MZ4H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券