Nullable(T)
Позволяет хранить специальный маркер (NULL), обозначающий «отсутствующее значение», наряду с обычными значениями, допустимыми для T. Например, столбец типа Nullable(Int8) может хранить значения типа Int8, а для строк, в которых нет значения, будет храниться NULL.
T не может быть ни одним из составных типов данных Array, Map и Tuple, но составные типы данных могут содержать значения типа Nullable, например Array(Nullable(Int8)).
Поле типа Nullable не может участвовать в индексах таблицы.
NULL является значением по умолчанию для любого типа Nullable, если иное не указано в конфигурации сервера ClickHouse.
Особенности хранения
Для хранения значений типа Nullable в столбце таблицы ClickHouse использует отдельный файл с NULL-масками в дополнение к обычному файлу со значениями. Записи в файле масок позволяют ClickHouse различать NULL и значение по умолчанию соответствующего типа данных для каждой строки таблицы. Из-за дополнительного файла столбец Nullable потребляет больше дискового пространства по сравнению с аналогичным обычным столбцом.
Использование Nullable почти всегда негативно влияет на производительность, учитывайте это при проектировании своих баз данных.
Поиск значений NULL
Можно найти значения NULL в столбце, используя подстолбец null, не считывая весь столбец. Он возвращает 1, если соответствующее значение равно NULL, и 0 в противном случае.
Пример
Запрос:
Результат: