Sql 数组_在配置单元中包含多个值

Sql 数组_在配置单元中包含多个值,sql,hive,Sql,Hive,有没有一种方便的方法可以使用配置单元中的ARRAY_CONTAINS函数在一个数组列中搜索多个条目,而不仅仅是一个条目?因此,不是: WHERE ARRAY_CONTAINS(array, val1) OR ARRAY_CONTAINS(array, val2) 我想写: WHERE ARRAY_CONTAINS(array, val1, val2) 完全的问题是,当我运行脚本时,我需要动态地从命令行参数中读取val1和val2,我通常不知道有多少值会受到限制。因此,您可以将vals看作是一

有没有一种方便的方法可以使用配置单元中的ARRAY_CONTAINS函数在一个数组列中搜索多个条目,而不仅仅是一个条目?因此,不是:

WHERE ARRAY_CONTAINS(array, val1) OR ARRAY_CONTAINS(array, val2)
我想写:

WHERE ARRAY_CONTAINS(array, val1, val2)
完全的问题是,当我运行脚本时,我需要动态地从命令行参数中读取
val1
val2
,我通常不知道有多少值会受到限制。因此,您可以将
vals
看作是一个逗号分隔的列表(或数组),其中包含值
val1
val2
,我想编写

WHERE ARRAY_CONTAINS(array, vals)
提前谢谢

有一个UDF可以让您获取两个数组的交集。假设你的价值观具有结构

values_array = [val1, val2, ..., valn]
然后你就可以做了

where array_intersection(array, values_array)[0] is not null
如果它们没有任何公共元素,将返回
[]
,因此
[][0]
将为
null
select* 从桌子上 侧视图分解(阵列)a为arr 其中arr in(VAL) ;

资料

[“雷尼尔”、“会合CX”、“世纪定制4dr”、“莱萨伯定制4dr”、“富豪LS 4dr”、“富豪GS 4dr”、“莱萨伯有限公司4dr”、“公园大道4dr”、“公园大道超4dr”]

返回
是的

我和迪纳摩同舟共济,这仍然是最好的解决方案吗?是的,我想这是你最好的选择。
Create table tmp_cars AS  Select make,COLLECT_LIST(TRIM(model))
model_List from default.cars GROUP  BY make;

Select array_contains(model_List,CAST('Rainier' as varchar(40)))
FROM Default.tmp_cars t
where make = 'Buick';