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

Posted

技术标签:

【中文标题】检查 BigQuery ARRAY 中是不是有多个元素【英文标题】:Check to see if Multiple Elements in BigQuery ARRAY检查 BigQuery ARRAY 中是否有多个元素 【发布时间】:2020-06-19 23:26:16 【问题描述】:

对于 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

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

case "7" in unnest(myArray)  WHEN TRUE THEN 
        'value is in array'
        ELSE 'value is not in array' end

我也可以让嵌套的 case 语句正常工作,但我真正需要的是 OR 语法,如果这是真的,则转移到 nxt 值。

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

【问题讨论】:

【参考方案1】:

您可以使用以下版本

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    

显然你可以使用简单的

CASE "7" in UNNEST(myArray) or "8" in UNNEST(myArray) WHEN ...     

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

最后你可以用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` 

【讨论】:

考虑也投票赞成答案

以上是关于检查 BigQuery ARRAY 中是不是有多个元素的主要内容,如果未能解决你的问题,请参考以下文章

我们是不是可以检查 bigquery 中的表是不是处于锁定状态或正在执行 DML 操作

bigquery中的多个array_agg

如何在 bigquery 中删除 array_agg

检查列表字符串 BigQuery 中的元素是不是

如何检查 BigQuery 中是不是存在数据集?

检查 Airflow 中是不是存在 Bigquery 分区