检查 BigQuery ARRAY 中是否有多个元素

hse*_*bie 3 arrays google-bigquery

对于bigquery标准sql

我正在尝试找出适当的语法来查找数组是否包含 2 个或更多字符串元素。

例如,如果数组 = ["5","6","7","8"]

期望的情况是这样的,

case "7" OR "8" in unnest(myArray)  WHEN TRUE THEN 
    'value is in array'
    ELSE 'value is not in array' end
Run Code Online (Sandbox Code Playgroud)

我可以得到单个值作为 True 返回,但不能返回多个值,即这工作正常

case "7" in unnest(myArray)  WHEN TRUE THEN 
        'value is in array'
        ELSE 'value is not in array' end
Run Code Online (Sandbox Code Playgroud)

我还可以使用嵌套的 case 语句,但我真正需要的是 OR 语法,而不是如果这是 true 则移动到 nxt 值。

我可以在文档中的任何地方找到它。有高手愿意帮忙吗?

Mik*_*ant 6

您可以使用以下版本

CASE (SELECT COUNT(1) FROM UNNEST(myArray) el WHERE el IN ("7", "8")) > 0 
  WHEN TRUE THEN 'value is in array'
  ELSE 'value is not in array' 
END result    
Run Code Online (Sandbox Code Playgroud)

显然你可以使用简单的

CASE "7" in UNNEST(myArray) or "8" in UNNEST(myArray) WHEN ...     
Run Code Online (Sandbox Code Playgroud)

但是如果您有不止两个字符串要查找,这将变得太重,而第一个选项没有这个“问题”

最后,您可以将以下“简化”版本与 UDF 一起使用

#standardSQL
CREATE TEMP FUNCTION isInArray(arr1 ANY TYPE, arr2 ANY TYPE) AS (
  (SELECT COUNT(1) FROM UNNEST(arr1) el JOIN UNNEST(arr2) el USING(el)) > 0 
SELECT *, 
  CASE isInArray(myArray, ["7", "8"])
    WHEN TRUE THEN 'value is in array'
    ELSE 'value is not in array' 
  END result  
FROM `project.dataset.table` 
Run Code Online (Sandbox Code Playgroud)