BigQuery中是否有更简洁的数组值匹配实现方式?
BigQuery中数组值匹配的简洁实现方式
你提到的通过CROSS JOIN UNNEST处理数组包含匹配的方法确实繁琐,尤其嵌套数组场景下更麻烦。BigQuery提供了**ARRAY_CONTAINS函数**,完全可以满足你想要的简洁写法需求。
基本语法
ARRAY_CONTAINS(array_expression, target_value)
该函数接收两个参数:目标数组和要匹配的值,返回布尔值(true/false),直接在WHERE子句中使用即可,无需展开数组。
针对你的场景改写示例
原查询可以简化为:
with arr_tbl as ( select 1 as id, ["pear", "mango"] as fruits union all select 2 as id, ["pear", "apricot"] ) select id, fruits from arr_tbl where ARRAY_CONTAINS(fruits, "mango")
执行后会直接返回id=1的行,逻辑和原查询一致,但代码简洁很多。
数值数组的匹配示例
对应你提到的list_contains用法,BigQuery中的写法如下:
select ARRAY_CONTAINS([1,2,3], 1) as is_contained;
查询结果为:
┌───────────────┐ │ is_contained │ ╞═══════════════╡ │ true │
嵌套数组场景的优势
对于嵌套数组(如[[1,2], [3,4]]),使用ARRAY_CONTAINS无需多层UNNEST,直接匹配嵌套元素即可:
select ARRAY_CONTAINS([[1,2], [3,4]], [1,2]) as is_contained;
返回结果同样为true,大幅降低了嵌套数组的处理复杂度。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

