美文网首页Hive在简书Hive
Lateral View和Explode用法简介

Lateral View和Explode用法简介

作者: gofun | 来源:发表于2019-04-02 16:35 被阅读0次

    一、Explode用法

    • hive wiki对于expolde的解释如下:

    explode() takes in an array (or a map) as an input and outputs the elements of the array (map) as separate rows. UDTFs can be used in the SELECT expression list and as a part of LATERAL VIEW.

    explode()接受一个数组(或一个map)作为输入,并将数组元素(map)作为单独的行输出。 UDTF可以在SELECT表达式列表中使用,也可以作为LATERAL VIEW的一部分使用。

    使用如下图:

    • 将Map作为输入端
    map作为输入端
    • 将ArrayList作为输入端:
    array作为输入端

    二、Lateral View用法

    lateral view的意义是配合explode(或者其他的UDTF),一个语句生成把单行数据拆解成多行后的数据结果集。

    首先准备一张表test,test表的数据结构如下

    test表结构
    利用 lateral view explode 结合map的使用方式和结果如下:
    select
        t.cola
        ,t.indexa
        ,tt.class_id
        ,tt.score
    from test t
    LATERAL VIEW explode(map('1',100,'2',200)) tt as class_id ,score
    ;
    

    输出结果:

    结果

    结果注解:

    test本身只有4条记录, explode(map('1',100,'2',200)) 本身只有2条记录,

    上述sql的原理实质上是对2个结果集做了笛卡尔积。

    实现形式如下:

    select 
    
        t1.column1
    
        ,t1.column2
    
        ,…
    
        ,t2.column1
    
        ,t2.column2 
    
    from tablea t1 
    
    lateral view explode(…) t2 as column1,column2
    
    ;
    
    利用 lateral view explode 结合array的使用方式和结果如下:
    select
    
        t.cola
    
        ,t.indexa
    
        ,tt.class_id
    
    from test t
    
    lateral view explode(array(1,100)) tt as class_id
    
    ;
    

    输出如下:

    ArrayList端结果

    相关文章

      网友评论

        本文标题:Lateral View和Explode用法简介

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