メインコンテンツまでスキップ
メインコンテンツまでスキップ

Nullable(T)

Tで許可されている通常の値とともに「欠損値」を示す特別なマーカー(NULL)を保存できるようにします。例えば、Nullable(Int8)型のカラムはInt8型の値を保存でき、値を持たない行にはNULLが保存されます。

TArrayMap、およびTupleのいずれかの複合データ型であってはならず、複合データ型はNullable型の値を含むことができます。例えば、Array(Nullable(Int8))です。

Nullable型のフィールドはテーブルインデックスに含めることはできません。

NULLは、ClickHouseサーバー構成で他に指定されていない限り、すべてのNullable型のデフォルト値です。

ストレージ機能

ClickHouseは、テーブルカラムにNullable型の値を格納するために、値のある通常のファイルに加えて、NULLマスクのある別のファイルを使用します。マスクファイルのエントリは、ClickHouseが各テーブル行の該当するデータ型のデフォルト値とNULLを区別するのに役立ちます。追加のファイルがあるため、Nullableカラムは類似の通常のカラムと比べて追加のストレージスペースを消費します。

注記

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 TinyLog
INSERT INTO t_null VALUES (1, NULL), (2, 3)
SELECT x + y FROM t_null
┌─plus(x, y)─┐
│       ᴺᵁᴸᴸ │
│          5 │
└────────────┘