Hive中posexplode函数的使用及实现多行炸裂

                                                           原数据

posexplode函数的使用

需求:我想要对student这个字段进行行转列并且带有顺序号

效果如下:

代码如下:

select
    class,student_index + 1 as student_index,student_name
from
    default.classinfo
    lateral view posexplode(split(student,',')) t as student_index,student_name;

 这个+1的原因是编号是从0开始的

多行炸裂需求的实现

需求:我们想基于两列explode,同时能够使学生和其成绩能够匹配。

即期望的效果如下:

 错误实现

select
    class,student_name,student_score
from
    default.classinfo
    lateral view explode(split(student,',')) sn as student_name
    lateral view explode(split(score,',')) sc as student_score

效果如下:

这个实现思路就是错误的,如果我们分别对两列进行explode的话,假设每列都有三个值,那么最终会变成3 * 3 = 9行。但我们想要的结果只有三行。此时我们可以进行两次posexplode,姓名和成绩都保留对应的序号,即使变成了9行,我们通过where条件只保留序号相同的行即可。

正确实现

select
    class,student_name,student_score
from
    default.classinfo
    lateral view posexplode(split(student,',')) sn as student_index_sn,student_name
    lateral view posexplode(split(score,',')) sc as student_index_sc,student_score
where
    student_index_sn = student_index_sc;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值