1、map结构
- 定义:map<datatype1,datatype2> 类型1和类型2可以一样
map<string,double> 两种数据类型合成
例子:{“data":1232.23,”data2":323.0}
与其他语言一样,是map{key1:value1,key2:value2,...}
- 访问可以使用列名来访问: select map1['name'] from table ;
- map_values(map):取map字段全部value : select map_values(map1) from table
如果存在则显示value如果不存在则显示的是null
- map大小:使用size()
size(categories)
展开使用:
lateral view explode进行行转列:
select name,id
from table_test
lateral view explode(map_1) table1 as name,id;
2.array
定义:array类型是[datatype,datatype,...]
- 查看大小亦可使用:size()函数
查找某个数据是否存在,可使用lateral view explode进行行转列。如果有唯一索引的话,再使用group by 综合collect_list 合并。
例子:
select id,subject_names
from table_name
lateral view explode(subjects) subjectsTable as subjects_names
select id,collect_list(subject_names) as subjects
from table2
group by id
3.struct类型
`item` struct<category:string,title:string,score:double>
- 查看struct中的数值,使用. 即跟c++结构体查看类似:item.category
假设数据如下所示:
categories |
{category:'1-2',score:'50',title:'语文'} |
select split(item.category,'-')[0] as first_level,
split(item.category,'-')[1] as second_level,
item.title,count(1) as num,max(item.score) as score from table1
where size(split(item.category,'-'))>1
group by item.title,split(item.category,'-')[0]
结果:
first_level | second_level | score | num | title |
1 | 2 | 50 | 1 | 语文 |