T에서 허용하는 일반 값과 함께 "누락된 값"을 나타내는 특수 마커(NULL)를 저장할 수 있습니다. 예를 들어 Nullable(Int8) 타입의 컬럼은 Int8 타입 값을 저장할 수 있으며, 값이 없는 행에는 NULL이 저장됩니다.
T는 다음 복합 데이터 타입 중 어느 것도 될 수 없습니다.
하지만 복합 데이터 타입은 Nullable 타입 값을 포함할 수 있습니다. 예를 들어 Array(Nullable(Int8)) 또는 Tuple(Nullable(String), Nullable(Int64))와 같습니다.
Nullable 타입 필드는 테이블 인덱스에 포함할 수 없습니다.
ClickHouse 서버 구성에서 별도로 지정하지 않는 한, NULL은 모든 Nullable 타입의 기본값입니다。
저장소 기능
테이블 컬럼에 Nullable 타입 값을 저장할 때 ClickHouse는 값이 저장된 일반 파일 외에 NULL 마스크가 포함된 별도의 파일도 사용합니다. 마스크 파일의 각 항목을 통해 ClickHouse는 테이블의 각 행에서 NULL과 해당 데이터 타입의 기본값을 구분할 수 있습니다. 이 추가 파일 때문에 Nullable 컬럼은 유사한 일반 컬럼보다 더 많은 저장 공간을 사용합니다.
NULL 찾기
전체 컬럼을 읽지 않고도 null 하위 컬럼을 사용해 컬럼에서 NULL 값을 찾을 수 있습니다. 해당 값이 NULL이면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
예시
CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO nullable VALUES (1) (NULL) (2) (NULL);
SELECT n.null FROM nullable;┌─n.null─┐
│ 0 │
│ 1 │
│ 0 │
│ 1 │
└────────┘사용 예시
CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLogINSERT INTO t_null VALUES (1, NULL), (2, 3)SELECT x + y FROM t_null┌─plus(x, y)─┐
│ ᴺᵁᴸᴸ │
│ 5 │
└────────────┘