美文网首页
EXPLODE和LATERAL VIEW

EXPLODE和LATERAL VIEW

作者: 抬头挺胸才算活着 | 来源:发表于2021-11-29 12:51 被阅读0次
  • 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使用。

  • 参考资料
    Hive必会SQL语法Explode 和 Lateral View

相关文章

网友评论

      本文标题:EXPLODE和LATERAL VIEW

      本文链接:https://www.haomeiwen.com/subject/qzgkxrtx.html