假如有这么一组类型的数据:
id,name,course
1,xiaoming,数学:语文:生物:化学
2,lilei,化学:地理:物理:语文
3,hanmeimei,数据结构:操作系统:计组
我们要把他放到hive表中做相应的操作,course显然需要array
即:
create table t_xuanxiu(uid string,name string,kc array
row format delimited
fields terminated by ','
collection items terminated by ':';
那么explore()函数到底有啥作用呢?我们可以使用这个函数将一组数组的数据变成一列表
例如select explode(kc) from t_xuanxiu where uid=1;结果如下:
col
数学
语文
英语
生物
lateral view 表生成函数,可以将explode的数据生成一个列表
select uid,name,tmp.* from t_xuanxiu lateral view explode(kc) tmp as course;结果如下:
1,xiaoming,数学
1,xiaoming,语文
1,xiaoming,生物
1,xiaoming,英语
2,lilei,化学
2,lilei,地理
2,lilei,物理
2,lilei,语文
3,hanmeimei,数据结构
3,hanmeimei,操作系统
3,hanmeimei,计组
这样我们就可以按照这个表做相应的操作了。
场景2:如果我们对一组单词进行统计出现次数
a b c d e f g
a b c
e f g a
b c d b
create table t_juzi(line string) row format delimited;
load data local inpath '/root/words.txt' into table t_juzi;
(select tmp.* from t_juzi lateral view explode(split(line,' ')) tmp as word) 这句的效果就是产生一列数据的表,每一行一个单词,接下来我们只要通过这个表做个分组聚合即可
select a.word,count(1) cnt
from
(select tmp.* from t_juzi lateral view explode(split(line,' ')) tmp as word) a
group by a.word
order by cnt desc;