BigQuery: проверка содержимого массива с использованием UNNEST - PullRequest
0 голосов
/ 13 января 2020

В последние часы я пытался найти способ проверить в BigQuery, содержит ли массив определенное значение без использования UNNEST. Причина, по которой я не хочу использовать UNNEST, заключается в том, что мне не нужен результат UNNEST, я просто хочу проверить, есть ли значение в нем или нет (а затем выполнить условие CASE WHEN для него).

Я пробовал разные способы, такие как value = ANY (массив), CONTAINS, CONTAINS_ARRAY, но ни один из них не работает на BigQuery.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Ниже приведен пример для BigQuery Standard SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, [1,2,3] arr UNION ALL
  SELECT 2, [4,5]
)
SELECT id, arr,
  CASE 1 IN UNNEST(arr) 
    WHEN TRUE THEN 'valie is in array'
    ELSE 'valie is not in array'
  END conclusion
FROM `project.dataset.table`  

с результатом

enter image description here

Как видите, результат не является невестимым!

0 голосов
/ 13 января 2020

Если единственной причиной, по которой вы не используете UNNEST , является непроверенный результат, я бы не стал отказываться от этой опции. Хотя я бы посоветовал вам использовать UNNEST и не выбирать неопубликованные столбцы. Таким образом, сохраняя вложенный результат, вы сможете использовать эти новые временные столбцы для проверки ваших условий в ваших CASE WHEN заявлениях.

Я использовал publi c набор данных в BigQuery, чтобы проиллюстрировать этот алгоритм для вас. Синтаксис:

WITH
  temporary_table AS(
  SELECT
    *,
    param
  FROM
    `firebase-public-project.analytics_153293282.events_20181003`,
    UNNEST(event_params) AS param )
SELECT
  *,
  CASE
    WHEN (param.key IN ('value', 'board')) THEN TRUE
END
  AS check
FROM
  temporary_table
LIMIT
  100;

Обратите внимание, что unnested столбцы из event_param не отображаются в конечном результате. Кроме того, столбец check был создан и использован как логическое значение, которое может быть опущено, а также может использоваться как флаг для внесения желаемых изменений в желаемые столбцы.

Надеюсь, это поможет.

...