问题描述
例如,我现在有两列数组:
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