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