Hive函数 explore() 和lateral view的使用

假如有这么一组类型的数据:

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;

你可能感兴趣的:(Hive)