Passer au contenu principal
Permet de stocker un marqueur spécial (NULL) qui indique une « valeur manquante » en plus des valeurs normales autorisées par T. Par exemple, une colonne de type Nullable(Int8) peut stocker des valeurs de type Int8, et les lignes qui n’ont pas de valeur stockeront NULL. T ne peut être aucun des types de données composites suivants :
  • Array — Non pris en charge
  • Map — Non pris en charge
  • Tuple — Prise en charge bêta*
Cependant, les types de données composites peuvent contenir des valeurs de type Nullable, par exemple Array(Nullable(Int8)) ou Tuple(Nullable(String), Nullable(Int64)).
Bêta : tuples Nullable
Un champ de type Nullable ne peut pas être inclus dans les index de table. NULL est la valeur par défaut de tout type Nullable, sauf indication contraire dans la configuration du serveur ClickHouse.

Fonctionnalités de stockage

Pour stocker des valeurs de type Nullable dans une colonne d’une table, ClickHouse utilise, en plus du fichier de valeurs normal, un fichier distinct contenant des masques NULL. Les entrées du fichier de masques permettent à ClickHouse de distinguer NULL de la valeur par défaut du type de données correspondant pour chaque ligne de la table. En raison de ce fichier supplémentaire, une colonne Nullable consomme davantage d’espace de stockage qu’une colonne normale équivalente.
L’utilisation de Nullable a presque toujours un impact négatif sur les performances. Gardez-le à l’esprit lors de la conception de vos bases de données.

Trouver des valeurs NULL

Il est possible de trouver des valeurs NULL dans une colonne en utilisant la sous-colonne null sans lire l’intégralité de la colonne. Elle renvoie 1 si la valeur correspondante est NULL, et 0 sinon. Exemple
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 │
└────────┘

Exemple d’utilisation

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 │
└────────────┘
Dernière modification le 25 juin 2026