我有两个这样的数组,它们是从我创建的UDF中返回的:
阵列A - [P908,S57,A65] 数组B - [P908,S57]
我需要检查数组A中是否存在数组A的元素,或者使用配置单元查询检查数组B中的元素是否存在于数组A中。
我被困在这里。有人可以建议吗?
我还可以从UDF中返回一些其他数据类型来代替数组,以便比较更容易吗?
答案 0 :(得分:0)
我们可以使用横向视图执行此操作。 让我们在表中分别有2个表,Table1和Table2以及带有数组字段的列col1和col2。 使用类似下面的内容: -
select collect_set (array_contains (col1 , r.tab2) )
from table1 ,
(select exp1 as tab2
from (table2 t2 lateral view explode(col2) exploded_table as exp1 ) ) r
您也可以使用array_intersection或其他数组函数。
答案 1 :(得分:0)
^^^ error: 'constexpr const value_type Mode<main()::TestEnum, (main::TestEnum)0>::value', declared using local type 'const value_type {aka const main()::TestEnum}', is used but never defined [-fpermissive]
constexpr operator value_type() const noexcept { return value; }
};
int main()
{
enum class TestEnum { test1, test2 };
constexpr Mode<TestEnum, TestEnum::test1> test1 = {};
constexpr Mode<TestEnum, TestEnum::test2> test2 = {};
assert(static_cast<TestEnum>(test1) == TestEnum::test1);
}
enum class TestEnum { test1, test2 };
select concat(',',concat_ws(',',A),',') regexp
concat(',(',concat_ws('|',B),'),') as are_common_elements
from mytable
;
create table mytable (id int,A array<string>,B array<string>);
insert into table mytable
select 1,array('P908','S57','A65'),array('P908','S57')
union all select 2,array('P908','S57','A65'),array('P9','S5777')
;
select * from mytable;