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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>