黑马程序员技术交流社区

标题: 【上海校区】Hive常用函数 -- 复合类型构造函数 [打印本页]

作者: 不二晨    时间: 2019-3-15 16:09
标题: 【上海校区】Hive常用函数 -- 复合类型构造函数
map 结构

map 构造函数
语法:map(k1,v1,k2,v2,…)
操作类型:map
说明:使用给定的 key-value 对,构造一个 map 数据结构

hive> select map('k1','v1','k2','v2') from iteblog;
OK
{"k2":"v2","k1":"v1"}
1
2
3
hive> Create table iteblog as select map('100','tom','200','mary') as t from iteblog;
hive> describe iteblog;
t       map<string ,string>
hive> select t from iteblog;
{"100":"tom","200":"mary"}
1
2
3
4
5
获取 map 中的元素M[key]
语法:M[key]
操作类型:所有基础类型。M为map类型,key为map中的key值
说明:返回 map 结构 M 中 key 对应的 value,没有对应的 key 返回 NULL。
比如:M是值为{‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’}的map类型,那么M[‘all’]将会返回’foobar’

hive> select map('k1','v1','k2','v2')['k1'] from iteblog;
OK
v1
hive> select map('k1','v1','k2','v2')['k3'] from iteblog;
OK
NULL
1
2
3
4
5
6
hive> Create table iteblog as select map('100','tom','200','mary') as t from iteblog;
hive> select t['200'],t['100'] from iteblog;
mary    tom
1
2
3
Map类型长度函数: size(Map<k .V>)
语法: size(Map<k .V>)
返回值: int
说明: 返回map类型的长度

hive> select size(map('100','tom','101','mary')) from iteblog;
2
1
2
struct 结构

struct 构造函数
语法:struct(val1,val2,val3,…)
操作类型:struct
说明:使用给定的表达式,构造一个 struct 数据结构

hive> select struct(1,'aaa',FALSE) from iteblog;
OK
{"col1":1,"col2":"aaa","col3":false}
1
2
3
hive> create table iteblog as select struct('tom','mary','tim') as t from iteblog;
hive> describe iteblog;
t       struct<col1:string ,col2:string,col3:string>
hive> select t from iteblog;
{"col1":"tom","col2":"mary","col3":"tim"}
1
2
3
4
5
获取 struct 中的元素 S.x
语法:S.x
操作类型:所有类型。S为struct类型
说明:返回 struct 结构 S 中名为 x 的元素。
比如:对于结构体struct foobar {int foo, int bar},foobar.foo返回结构体中的foo字段

hive> select named_struct('a',1,'b','aaa','c',FALSE).c from iteblog;
OK
false
1
2
3
hive> create table iteblog as select struct('tom','mary','tim') as t from iteblog;
hive> describe iteblog;
t       struct<col1:string ,col2:string,col3:string>
hive> select t.col1,t.col3 from iteblog;
tom     tim
1
2
3
4
5
array 结构

array 构造函数
语法:array(val1,val2,val3,…)
操作类型:array
说明:使用给定的表达式,构造一个 array 数据结构

hive> select array(1,2,3) from iteblog;
OK
[1,2,3]
1
2
3
hive> create table iteblog as select array("tom","mary","tim") as t from iteblog;
hive> describe iteblog;
t       array<string>
hive> select t from iteblog;
["tom","mary","tim"]
1
2
3
4
5
获取 array 中的元素 A[n]
语法:A[n]
操作类型:所有基础类型
说明:返回数组 A 中第 n 个索引的元素值,数组的起始下标为0。
比如:A是值为[‘foo’, ‘bar’]的数组类型,那么A[0]将返回’foo’,而A[1]将返回’bar’

hive> select array('a','b','c')[1] from iteblog;
OK
b
1
2
3
hive> create table iteblog as select array("tom","mary","tim") as t from iteblog;
hive> select t[0],t[1],t[2] from iteblog;
tom     mary    tim
1
2
3
array类型长度函数: size(Array)
语法: size(Array)
返回值: int
说明: 返回array类型的长度

hive> select size(array('100','101','102','103')) from iteblog;
4
1
2
named_struct 结构
语法:named_struct(name1,val1,name2,val2,name3,val3,…)
操作类型:struct
说明:使用给定的表达式,构造一个指定列名的 struct 数据结构

hive> select named_struct('a',1,'b','aaa','c',FALSE) from iteblog;
OK
{"a":1,"b":"aaa","c":false}
1
2
3
create_union
语法:create_union (tag, val1, val2, …)
操作类型:uniontype
说明:使用给定的 tag 和表达式,构造一个 uniontype 数据结构。tag 表示使用第 tag 个
表达式作为 uniontype 的 value

hive> select create_union(0,'ss',array(1,2,3)) from iteblog;
OK
{0:"ss"}
hive> select create_union(1,'ss',array(1,2,3)) from iteblog;
OK
{1:[1,2,3]}
hive> select create_union(1,'ss',array(1,2,3),'aa') from iteblog;
OK
{2:'aa'}
---------------------
【转载,仅作分享,侵删】
作者:storm_fury
来源:CSDN
原文:https://blog.csdn.net/weixin_43215250/article/details/88416056
版权声明:本文为博主原创文章,转载请附上博文链接!


作者: 不二晨    时间: 2019-3-20 17:19
奈斯,感谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2