检查 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 中是不是有多个元素的主要内容,如果未能解决你的问题,请参考以下文章