hive sql,lateral view 侧写函数与 explode 应用
需求:
转变为如下图格式
先建表
create table movie(name string,category string)
row format delimited fields terminated by '\t';
导入数据
load data local inpath '/home/hadoop/data/movie.txt' into table movie;
直接需求用explode函数直接对category操作试试
报错:
FAILED: UDFArgumentException explode() takes an array or a map as a parameter
提示explode函数要用数组或者map类型传入。这里想到了split函数
split函数:split(string str, string pat),按照pat分割str
select split(category,",") from movie;
得到数组,再用explode试试
select explode(split(category,",")) from movie;
成功一行转多列,但名字没查找,在select添加name试试
select name,explode(split(catelogy,",")) from movie;
报错:
SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions
原因是name只有3列,而catelogy使用explode函数后,分成了12列,远远大于原来所对应的name的列数
这里使用了lateral view函数
select
name,
catelogy_name
from
movie
lateral view explode(split(category,",")) movie_temp as catelogy_name
这里的movie_temp是侧写表的别名,catelogy_name是使用explode函数后的别名。
lateral view实际上的操作可以认为是做了一次笛卡尔积。如图:
即得到所需结果
版权声明:本文为leileihhxx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。