array() 声明数组
该API会将里面的参数转成一个数组
取值:['键下标'] 非键名称
判断数组中是否有指定的键
select a,a[1] -- 这里指定的是下标
from (
select `array`('1','2','3','4','5') a
) as t;
-- ["1","2","3","4","5"] 2
select a,a[1],array_contains(a,6) -- 这里指定的是下标
from (
select `array`(1,2,3,4,5) a
) as t;
-- [1,2,3,4,5] 2 false
map() 声明map结构
该API会将参数转成键值对,参数必须是偶数,其中奇数参数看作键,偶数参数看作值。声明时类型要制定。
取值:['键名称'] 非键位置
select `map`('a','b','c','d') -- {"a":"b","c":"d"}
select m,
m['a']
from (select `map`('a', 'b', 'c', 'd') m-- {"a":"b","c":"d"}
) t;
-- {"a":"b","c":"d"} b
stuct() 声明结构体
类似于Java中的类
所有参数会被当成值,不要求成对;取值是.colN取出对应字段N的值
select obj,obj.col1 --,obj.b报错
from (
select struct('a', 'b', 'c') obj
) t;
-- {"col1":"a","col2":"b","col3":"c"} a
name_struct()
参数必须成对出现,奇参会当成键,偶参会被当成值
select obj,obj.a
from (
select named_struct('a', 1, 'b', 2, 'c', 3) obj
) t;
-- {"a":1,"b":2,"c":3} 1
备注:Hive建表对复杂JSON格式(对象里套对象)文件处理中,如果字段固定,用struct结构体存储;如果字段不固定,用map结构处理。