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().