Hive 利用lateral view, explode, split函数实现行转列

问题:
一个联系人可能有多个号码,但是源表存的时候是放在一个字段的,分隔的形式也是多种多样,现在需要将它们一个个分开,实现行转列。

举个例子,源表(phone_info)为

namelinkman_phone
小明126;946:789*235

实现的结果为

namephone_number
小明126
小明946
小明789
小明235

有兴趣的朋友可以先试试,不急着往后看解析。

解析思路:

利用split函数将合并在一起的字段拆分开,然后利用lateral view和explode函数将其展开显示。

代码如下:

select name,phone_number 
from phone_info
lateral view explode(split(linkman_phone,'[\\;|\\:|\\*|\\|]')) mytable as phone_number;

给大家排坑:
我自己最开始在写的时候犯了个错误,很简单的错误,就是忘了select新生成的列啊,然后一直以为没有实现行转列。

比如,下面这样写是不行的。

错误代码!

select name,linkman_phone
from phone_info
lateral view explode(split(linkman_phone,'[\\;|\\:|\\*|\\|]')) mytable as phone_number;

有任何问题也欢迎留言交流,互相学习,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值