当前位置:   article > 正文

Hive列转行 (Lateral View + explode)详解_hive lateral view explode(x)

hive lateral view explode(x)

需求:
《疑犯》 悬疑,动作,科幻,爱情
《lie to me》 悬疑,警匪,动作,心理,剧情
《战狼》 战争,动作,灾难
转成如下格式:
《疑犯》 悬疑
《疑犯》 动作
《疑犯》 科幻
《疑犯》 爱情
《lie to me》 悬疑
《lie to me》 警匪
《lie to me》 动作
《lie to me》 心理
《lie to me》 剧情
《战狼》 战争
《战狼》 动作
《战狼》 灾难
思路解析:
explode函数:处理map结构的字段,将数组转换成多行
step1:建表movie_info:

--对电影的风格使用数组,所以建表时要标明数组的分隔符语句  ——  collection items terminated by ","
create table movie_info(
    movie string,
    category array<string>)
row format delimited 
fields terminated by "\t"
collection items terminated by ","; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

– 插入数据

load data local inpath "/movie_info.txt" into table movie_info;
  • 1

查询表格:

select * from movie_info;
  • 1

在这里插入图片描述
此时可以看到category是一个数组,并且分隔符为",";
step2:explode的使用:
explode作用:处理map结构的字段,将数组转换成多行
所以我们现在先对category使用category函数:

select explode(category) from movie_info;
  • 1

结果:
在这里插入图片描述
如果想要得到题目的需求结果,那么需要在此结果上,每一部电影和该电影对应的category进行笛卡尔积,得到结果:
在这里插入图片描述
如果我们直接

select  movie,explode(category) from movie_info;
  • 1

查询直接报错,因为movie的结果只有三条,而explode(category)有 4 + 5 + 3 = 12条记录。
那么,我们由此引入LATERAL VIEW函数:
LATERAL VIEW:

1.Lateral View 用于和UDTF函数【explode,split】结合来使用。
2.首先通过UDTF函数将数据拆分成多行,再将多行结果组合成一个支持别名的虚拟表。
3…主要解决在select使用UDTF做查询的过程中查询只能包含单个UDTF,不能包含其它字段以及多个UDTF的情况。
4.语法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias (‘,’ columnAlias)

使用LATERAL VIEW + explode 函数进行查询,语句如下:

select movie,category_name 
from movie_info
LATERAL VIEW explode(category) tmpTable as category_name;
-- category_name 是给 explode(category) 列起的别名
  • 1
  • 2
  • 3
  • 4

结果如下:
在这里插入图片描述
到此,任务完成。我们下期再见。
文章转载自https://zhuanlan.zhihu.com/p/115913870

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/817161
推荐阅读
相关标签
  

闽ICP备14008679号