Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回任何非’的元素;t包含在两列SQL中_Sql_Arrays_String_Hiveql_Unnest - Fatal编程技术网

返回任何非’的元素;t包含在两列SQL中

返回任何非’的元素;t包含在两列SQL中,sql,arrays,string,hiveql,unnest,Sql,Arrays,String,Hiveql,Unnest,我在一个表中有两列,我想创建第三列,其中包含两列中未包含的任何元素。例如:两列的第一行如下所示: Col1: [‘apple’,’banana’,’orange’,’pear’] Col2: [‘apple’,’banana’] 它将返回: Col3: [‘orange’, ‘pear’] 本质上与数组_相交函数相反。我在php中见过array_diff,所以我想知道sql中是否有一个等价的函数?如果您有一个主键,那么我认为这将满足您的需要: select t.pk, collect_set

我在一个表中有两列,我想创建第三列,其中包含两列中未包含的任何元素。例如:两列的第一行如下所示:

Col1: [‘apple’,’banana’,’orange’,’pear’]
Col2: [‘apple’,’banana’]
它将返回:

Col3: [‘orange’, ‘pear’]

本质上与数组_相交函数相反。我在php中见过array_diff,所以我想知道sql中是否有一个等价的函数?

如果您有一个主键,那么我认为这将满足您的需要:

select t.pk, collect_set(case when c2.el is null then c1.el end)
from (t lateral view
      explode(t.col1) c1 as el 
     ) left join
     (t t2 lateral view
      explode(t2.col2) c2 as el
     )
     on t.pk = t2.pk and
        c1.el = c2.el
group by t.pk;

分解col1并使用array\u contains+case语句,使用collect\u set或collect\u list再次组装数组

演示:

结果:

col1                                 col2                col3
["apple","banana","orange","pear"]  ["apple","banana"]  ["orange","pear"]

否,上面的示例显示了表的第一行。每行由一个数组组成,每个数组具有不同数量的元素。它们是使用“collect_set”函数形成的数组
col1                                 col2                col3
["apple","banana","orange","pear"]  ["apple","banana"]  ["orange","pear"]