Убедитесь, что несколько элементов в BigQuery ARRAY - PullRequest
0 голосов
/ 20 июня 2020

Для стандарта bigquery sql

Я пытаюсь найти подходящий синтаксис для определения того, содержит ли массив 2 или более строковых элемента.

например, если array = [«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, а не если это true move на значение nxt.

Я могу найти это где угодно в документации. Есть ли там волшебники, желающие помочь?

1 Ответ

0 голосов
/ 20 июня 2020

Вы можете использовать версию ниже

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` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...