LATERAL VIEW explode 采坑, 遇到空的array/map不返回结果

LATERAL VIEW explode 函数在遇到空数组或空Map时不会返回结果,导致数据清洗时遗漏数据。解决办法是通过自定义UDF对null值进行特殊处理,确保即使数组或Map为空也能返回记录。
摘要由CSDN通过智能技术生成

LATERAL VIEW explode 说明: UDFArgumentException explode() takes an array or a map as a parameter, 主要是将array和map 打平;
比如:
有个test表,结构如下:

A B C
[“垂直频道优质网易号提权_实验组_1”,“mfv2替换实验_实验组_1”] 1 k1
null 2 k2

select A_explode from test where B=1 lateral view explode A subview as A_explode可得到结果:

垂直频道优质网易号提权_实验组_1
mfv2替换实验_实验组_1

但如果A是一个空的array或者map(值为null), lateral后不会返回任何值, 注意: 即使

select包含其他字段也不会返回任何值!
select包含其他字段也不会返回任何值!

例如test表还有B,C两列, 如果取A不为null, 写出如下SQL:
select A_explode,B,C, from test where B=1 lateral view explode A subview as A_explode
则结果为

A B C
垂直频道优质网易号提权_实验组_1 1 k1
mfv2替换实验_实验组_1 1 k1

如果取A为null, 写出如下SQL:
select A_explode,B,C, from test where B=2 lateral view explode A subview as A_explode
则结果什么都没有!!

这在做数据清洗的时候, 会遗留很多数据, 要避免这种情况出现, 需要对null的值进行特殊处理, 我采用的是写UDF的方法, 代码如下:

import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值