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( movie string, category array<string>) 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.按需求查询数据
select movie category_temp from movie_info LATERAL VIEW explode(category) emp_temp AS category_temp