hive Sql列转行使用explode的注意事项-null值处理

hive Sql列转行使用explode的注意事项-null值处理

日常工作中,我们经常会用Lateral View 结合explode将数据炸裂,但是该方法对应explode的内容是有非null限制的,否则就有可能造成数据缺失。

  • 准备数据
create table person as 
select '张三' as name,'武侠,科幻,动作' as movie
union all
select '李四' as name,'爱情,喜剧' as movie
union all
select '王五' as name,'' as movie
union all
select '赵六' as name,null as movie;

在这里插入图片描述

  • 炸裂数据
select * from person lateral view explode(split(movie,',')) tmp as tmp_movie;

在这里插入图片描述
查看结果我们可以发现 ‘赵六’ 这条数据丢了,这有可能会导致我们最终的统计数据出现错误。

  • 查找原因

通过定位我们可以发现 ‘赵六’ 这一行的movie字段为null,其split之后的结果自然也是为null,通过LATERAL VIEW explode之后会形成一个为null的view,这样无法关联出数据,该数据就会丢失。

  • 如何解决

使用官方提供的LATERAL VIEW OUTER来进行解决,该方法类似于left outer join,即如果explode出来的结果为null,也会保留记录,只不过对应字段为null,改写后的语句如下:

select * from person lateral view outer explode(split(movie,',')) tmp as tmp_movie;

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值