Перейти к основному содержанию
Позволяет хранить специальный маркер (NULL), обозначающий «отсутствующее значение», наряду с обычными значениями, допустимыми для T. Например, столбец типа Nullable(Int8) может хранить значения типа Int8, а в строках, где значение отсутствует, будет храниться NULL. T не может быть ни одним из следующих составных типов данных:
  • Array — Не поддерживается
  • Map — Не поддерживается
  • Tuple — Доступна экспериментальная поддержка*
Однако составные типы данных могут содержать значения типа Nullable, например Array(Nullable(Int8)) или Tuple(Nullable(String), Nullable(Int64)).
Экспериментально: Nullable Tuple
  • Nullable(Tuple(…)) поддерживается, если включен параметр allow_experimental_nullable_tuple_type = 1.
Поле типа Nullable нельзя включать в индексы таблицы. NULL — значение по умолчанию для любого типа Nullable, если иное не указано в конфигурации сервера ClickHouse.

Особенности хранилища

Чтобы хранить значения типа Nullable в столбце таблицы, ClickHouse помимо обычного файла со значениями использует отдельный файл с масками NULL. Записи в файле масок позволяют ClickHouse различать NULL и значение по умолчанию соответствующего типа данных для каждой строки таблицы. Из-за дополнительного файла столбец Nullable занимает больше места в хранилище по сравнению с аналогичным обычным столбцом.
Использование Nullable почти всегда отрицательно сказывается на производительности, учитывайте это при проектировании баз данных.

Поиск NULL

Найти значения NULL в столбце можно с помощью подстолбца null, не считывая весь столбец целиком. Он возвращает 1, если соответствующее значение равно NULL, и 0 в противном случае. Пример
Query
CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple();

INSERT INTO nullable VALUES (1) (NULL) (2) (NULL);

SELECT n.null FROM nullable;
Response
┌─n.null─┐
│      0 │
│      1 │
│      0 │
│      1 │
└────────┘

Пример использования

CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog
INSERT INTO t_null VALUES (1, NULL), (2, 3)
SELECT x + y FROM t_null
┌─plus(x, y)─┐
│       ᴺᵁᴸᴸ │
│          5 │
└────────────┘
Последнее изменение 10 июня 2026 г.