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
в противном случае.
Пример
Запрос:
Результат: