获取包装数组中的非空值

时间:2018-07-05 03:41:36

标签: apache-spark hive apache-spark-sql bigdata qubole

我有一个Wrapped Array,并且只想在使用 LATERAL VIEW EXPLODE 查询时获得Non Null值。我还尝试了 IS NOT NULL ,但是没有返回任何内容。

样本结构:

列名:theARRAY

WrappedArray([null,theVal,tags,[null,null,7298,null,null,null],false])

模式是

array<struct<id:string,name:string,type:string,value:struct<member0:string,member1:bigint,member2:int,member3:double,member4:float,member5:boolean>,shouldIndex:boolean>>

我的查询

SELECT DISTINCT revs
FROM events 
LATERAL VIEW EXPLODE(theARRAY.value.member2) theTab2 AS revs 

我的结果:

__________
|**revs**|
__________
|7298    |
__________
| null   |
__________

为什么使用 IS NOT NULL

SELECT DISTINCT revs
FROM events 
LATERAL VIEW EXPLODE(theARRAY.value.member2) theTab2 AS revs 
revs IS NOT NULL 

一无所获

我需要:

|**revs**|
__________
|7298    |
__________

如何解决我的查询以获得上述结果?

1 个答案:

答案 0 :(得分:1)

您可以将查询优化为:

SELECT revs FROM
( SELECT DISTINCT revs 'revs' 
FROM events 
LATERAL VIEW EXPLODE(theARRAY.value.member2) theTab2 AS revs 
) WHERE revs IS NOT NULL