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;

LATERAL VIEW explode 函数在遇到空数组或空Map时不会返回结果,导致数据清洗时遗漏数据。解决办法是通过自定义UDF对null值进行特殊处理,确保即使数组或Map为空也能返回记录。
最低0.47元/天 解锁文章
2018

被折叠的 条评论
为什么被折叠?



