-
EXPLODE
EXPLODE比较简单,是UDTF(User-Defined Table-Generating Functions,用户定义表生成函数,输入一行输出多行),将一个array炸成多行,一般和split一起使用 -
LATERAL VIEW
LATERAL VIEW起到一个将剩下其他行也生出相同行的作用。
比如下面的表,我们将userrole炸开的同时保留对应的username
也就是输出类似下面的结果
刘德华 演员
刘德华 导演
刘德华 制片人
李小龙 演员
李小龙 导演
李小龙 制片人
李小龙 幕后
李小龙 武术指导
或许我们想直接这样写SQL,结果出错,因为explode是UDTF,输入一行会输出多行,这个时候我们就需要用到LATERAL VIEW。
select username,explode(split(userrole,',')) from ods.ods_actor_data;
我们可以用下面的SQL语句即可得到我们想要的结果。
LATERAL VIEW的用法为:original_table LATERAL VIEW (outer) udtf(expression) tableAlias AS columnAlias,其中outer用于当udtf(expression)输出结果为null的时候保留左侧结果
select
username,role
from
ods.ods_actor_data
LATERAL VIEW
explode(split(userrole,',')) tmpTable as role
;
-
LATERAL VIEW与join
两者都是用笛卡尔积实现的,都可以实现一行变多行的操作,LATERAL VIEW结合UDTF使用,join连接两个表结合where使用。
网友评论