Использование IFNULL() в Google Bigquery

IFNULL() это стандартная функция SQL BigQuery, которая возвращает первый аргумент, если он не равен null, в противном случае она возвращает второй аргумент. Эта функция может быть полезна в случаях, когда вам нужно заменить отсутствующие значения непустыми значениями или наоборот. В этой сессии вопросов и ответов мы обсудим, как использовать IFNULL() в BigQuery, на практическом примере.

Практический пример

Давайте рассмотрим случай использования, когда у нас есть таблица со столбцами key, stringCol и integerCol. Столбцы key и stringCol хранят строки, а integerCol — целые числа.

CREATE TABLE IF NOT EXISTS myTable (
    key STRING,
    stringColumn STRING,
    integerColumn INT64
);

INSERT INTO
    myTable (key, stringCol, integerCol)
VALUES
    ('A', 'Hello', NULL),
    ('B', NULL, 123),
    ('C', 'World', 456);

Мы хотели бы создать новый столбец с именем singleValueCol, который принимает значение stringCol или integerCol. Если оба столбца не равны NULL, мы выбираем значение из stringCol.

SELECT
    key,
    IFNULL(stringCol, CAST(integerCol AS STRING)) AS singleValueCol
FROM
    myTable;

Результатом этого запроса будет:

+-----+------------------+
| A   | Hello            |
| B   | 123              |
| C   | World            |
+-----+------------------+

Объяснение кода

Приведенный выше код выбирает «ключевой» столбец из таблицы «myTable» и создает новый столбец с именем singleValueCol. Функция IFNULL() используется для создания этого нового столбца. Если значение в «stringColumn» не равно нулю, то возвращается значение в stringCol. В противном случае IFNULL() возвращает значение в integerCol, преобразованное в строку.

Функция CAST() используется для преобразования integerCol в строку. BigQuery не позволяет объединять строку с целочисленным столбцом. Поэтому вам необходимо сначала привести integerCol к строке, прежде чем использовать ее в операции конкатенации строк с stringCol.

Альтернативные способы

Другой способ добиться того же результата — использовать функцию COALESCE().

COALESCE() возвращает первое ненулевое значение в своих аргументах. Поэтому в нашем случае мы можем использовать COALESCE() для проверки первого ненулевого значения между stringCol и integerCol. Единственная разница между использованием IFNULL() и COALESCE() — это порядок аргументов. IFNULL() принимает два аргумента, а COALESCE() принимает несколько аргументов.

SELECT
    key,
    COALESCE(stringColn, CAST(integerCol AS STRING)) AS singleValueCol
FROM
    myTable;

Этот запрос дает тот же результат, что и предыдущий запрос. Единственное отличие — использование COALESCE() вместо IFNULL().

Резюме

IFNULL() — это полезная функция BigQuery Standard SQL для обработки нулевых значений. Это позволяет заменять нулевые значения ненулевыми значениями или наоборот. В этой сессии вопросов и ответов мы продемонстрировали, как использовать IFNULL() на практическом примере, и подробно объяснили его синтаксис. Мы также предоставили альтернативный способ достижения того же результата, используя COALESCE().