Saltar al contenido principal
Permite almacenar un marcador especial (NULL) que denota un “valor ausente” junto con los valores normales permitidos por T. Por ejemplo, una columna de tipo Nullable(Int8) puede almacenar valores de tipo Int8, y las filas que no tengan valor almacenarán NULL. T no puede ser ninguno de los siguientes tipos de datos compuestos:
  • Array — No compatible
  • Map — No compatible
  • Tuple — Soporte experimental disponible*
Sin embargo, los tipos de datos compuestos pueden contener valores de tipo Nullable, p. ej., Array(Nullable(Int8)) o Tuple(Nullable(String), Nullable(Int64)).
Experimental: Tuples Nullable
  • Nullable(Tuple(…)) es compatible cuando allow_experimental_nullable_tuple_type = 1 está habilitado.
Un campo de tipo Nullable no puede incluirse en los índices de tablas. NULL es el valor predeterminado para cualquier tipo Nullable, a menos que se especifique lo contrario en la configuración del servidor de ClickHouse.

Características de almacenamiento

Para almacenar valores de tipo Nullable en una columna de una tabla, ClickHouse utiliza un archivo independiente con máscaras NULL, además del archivo normal con los valores. Las entradas del archivo de máscaras permiten a ClickHouse distinguir entre NULL y el valor predeterminado del tipo de dato correspondiente para cada fila de la tabla. Debido a este archivo adicional, una columna Nullable consume más espacio de almacenamiento que una columna normal equivalente.
El uso de Nullable casi siempre afecta negativamente al rendimiento; téngalo en cuenta al diseñar sus bases de datos.

Cómo encontrar NULL

Es posible localizar valores NULL en una columna usando la subcolumna null sin necesidad de leer la columna completa. Devuelve 1 si el valor correspondiente es NULL y 0 en caso contrario. Ejemplo
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 │
└────────┘

Ejemplo de uso

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 │
└────────────┘
Última modificación el 10 de junio de 2026