如何在HIVE中获得所有元素而不是另一个数组?

问题描述

例如,我现在有两列数组:

id     col1     col2
A      [1,3]   [1,2,3]
B      [2]      [1,3]

我想要的是col2中的所有元素,而不是col1中的所有元素:

id     output
A      [2]
B      [1,3]

我该如何实现?

解决方法

分解col2数组,使用array_contains检查每个元素是否在另一个数组中,再次收集数组以查找不在col1数组中的元素

select t.id,collect_set(case when array_contains(t.col1,e.elem) then NULL else e.elem end) as result  
  from my_table t 
       lateral view explode(t.col2) e as elem
 group by t.id