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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值