温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
在前面的博文里,我已经介绍了
敲黑板,划重点
在前面的博文里,我首先详细撰写分享了
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/
看完本文有收获?请转发分享给更多人
关注「大数据躺过的坑」,提升大神技能
觉得不错,请点赞和留言
领取专属 10元无门槛券
私享最新 技术干货