T 所允许的正常值之外,存储表示“缺失值”的特殊标记 (NULL) 。例如,Nullable(Int8) 类型的列可以存储 Int8 类型的值,而没有值的行则存储 NULL。
T 不能是以下任一复合数据类型:
不过,复合数据类型可以包含 Nullable 类型的值,例如 Array(Nullable(Int8)) 或 Tuple(Nullable(String), Nullable(Int64))。
Experimental:Nullable Tuple
- 启用
allow_experimental_nullable_tuple_type = 1时,支持 Nullable(Tuple(…))。
Nullable 类型的字段不能包含在表索引中。
除非在 ClickHouse 服务器配置中另有指定,否则 NULL 是所有 Nullable 类型的默认值。
存储特性
Nullable 类型的值,ClickHouse 除了存放值的普通文件外,还会使用一个单独的文件来存储 NULL 掩码。掩码文件中的条目使 ClickHouse 能够区分每个表行中的 NULL 和相应数据类型的默认值。由于多了一个额外文件,Nullable 列相比类似的普通列会占用更多存储空间。
使用
Nullable 几乎总会对性能产生负面影响,设计数据库时请牢记这一点。查找 NULL
null 子列在无需读取整列的情况下查找列中的 NULL 值。若对应的值为 NULL,则返回 1;否则返回 0。
示例
Query
Response