【问题标题】: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 值。

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

【问题讨论】:

    标签: arrays google-bigquery


    【解决方案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` 
    

    【讨论】:

    • 考虑也投票赞成答案
    猜你喜欢
    • 2020-06-29
    • 2012-05-03
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2012-07-29
    • 2014-05-13
    相关资源
    最近更新 更多