Hive轻松使用explode和lateral view,实现行转列

Posted 里奥奥里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive轻松使用explode和lateral view,实现行转列相关的知识,希望对你有一定的参考价值。

二.explode和lateral view的使用
    这两个参数通常是一起搭配使用,所以放一起说明。
    
    explode作用于数组array和map,将其从行数据,转为列数据
    



    2.数据样例:
        array('A','B','C')
    



    2.1使用explode
        数组行转列

explode(array('A','B','C'))
>>>
col
A
B
C


        Map行转列

explode(map('A','水果','B','汽车','C','餐具'))
>>>
key			value
A			水果
B			汽车
C			餐具


        
    知道explode的作用后,再看来一般是什么场景使用。一般是一行数据中,单个字段对应,对应多个属性。
    如:

v1         v2
P40        数码,电子产品,通讯,华为


        
    期望以上数据如下展示:

v1         v2
P40        数码
P40        电子产品
P40        通讯
P40        华为


    可以得知行转列可以使用explode(),这里的v2是字符串,explode只接收数组和map,所以需要使用split(),该函数返回的结果是一个数组,那是不是直接:
    

select v1,explode(split(v2,',')) ;


    其实这么执行会报错,因为explode()是UDTF函数,不能和其他字段一起使用。
    这时候就需要用到lateral view 将行转列的数据"侧写"到v1字段上,达到想要的效果。

select v1,tmp from table lateral view explode(array('A','B','C'))  temple_data as tmp;
>>>
v1		tmp
P40		数码
P40		电子产品
P40		通讯
P40		华为


        
    到这里就演示完了。另外 lateral view 还有一个关键字 outer ,lateral view outer。
    加上该参数后,explode(array()) 如果返回的是空,数据也不会空结果,会是如下:

select v1,tmp from table lateral view outer explode(array())  temple_data as tmp;
>>>
v1		tmp
P40		NULL
P40		NULL
P40		NULL
P40		NULL

以上是关于Hive轻松使用explode和lateral view,实现行转列的主要内容,如果未能解决你的问题,请参考以下文章

Hive之explode()函数和posexplode()函数和lateral view函数

Hive行转列(explode/lateral view)

Hive 行转列LATERAL VIEW explode使用方法

Hive Lateral View + explode 详解

Hive Lateral View + explode 详解

解析Hive复杂字段1--lateral view explode