1.函数说明
EXPLODE(col):
explode(col)接受一个数组(或一个map)作为输入,并将数组元素(map)作为单独的行输出。 UDTF可以在SELECT表达式列表中使用,也可以作为LATERAL VIEW的一部分使用。
LATERAL VIEW:
用在FROM语句后:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
2.数据准备
movie
category
《疑犯追踪》
悬疑,动作,科幻,剧情
《Lie to me》
悬疑,警匪,动作,心理,剧情
《战狼2》
战争,动作,灾难
需求
将电影分类中的数组数据展开。结果如下:
《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼2》 战争
《战狼2》 动作
《战狼2》 灾难
4.创建本地movie.txt,导入数据
[hadoop@hadoop102 datas]$ vi movie.txt
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难
5.创建hive表并导入数据
create table movie_info(
moviestring,
category array)
row format delimited fields terminated by"\t"collection items terminated by",";
load data local inpath"/opt/module/datas/movie.txt" into table movie_info;
6.按需求查询数据
selectmovie
category_tempfrommovie_info
LATERAL VIEW explode(category) emp_temp AS category_temp