sql - HIVE中如何获取一个数组中的所有元素而不是另一个数组中的所有元素?

标签 sql arrays hive hiveql

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

id     col1     col2
A      [1, 3]   [1, 2, 3]
B      [2]      [1, 2, 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

关于sql - HIVE中如何获取一个数组中的所有元素而不是另一个数组中的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64132317/

相关文章:

java - 对数组元素的 volatile 访问

hive - sqoop 选项 "--map-column-java"允许的数据类型是什么?

date - 如何在HIVE中进行字符串日期操作?

hadoop - 如何才能仅从hdfs联合中的一个 namespace 中排除某些数据节点?

mysql - WHERE 中的 SQL GROUP_CONCAT 别名

sql - 在 PostgreSQL 中创建触发器时出现 NEW 语法错误

arrays - 获取数组而不是字符串

java - Java 中的 gem 棋游戏 - 在 while 循环中使用 int 数组

sql - 在 WHERE 子句中重用计算列

SQL变量,怎么做?