Nullable(T)
T で許可されている通常の値に加えて、「値が存在しない」ことを示す特別なマーカー(NULL)を保存できます。例えば、Nullable(Int8) 型のカラムには Int8 型の値を保存でき、値を持たない行には NULL が保存されます。
T としては、複合データ型である Array、Map、Tuple のいずれも指定できませんが、複合データ型の要素として Nullable 型の値を含めることはできます(例: Array(Nullable(Int8)))。
Nullable 型のフィールドはテーブルのインデックスに含めることはできません。
ClickHouse サーバーの設定で別途指定しない限り、任意の Nullable 型のデフォルト値は NULL です。
ストレージ機能
テーブル列に Nullable 型の値を格納するために、ClickHouse は値を格納する通常のファイルとは別に、NULL マスクを含むファイルを使用します。マスクファイル内のエントリによって、ClickHouse は各テーブル行について、NULL と、そのデータ型に対応するデフォルト値とを区別できます。追加のファイルが必要になるため、Nullable 列は、同等の通常列と比較して、より多くのストレージ容量を消費します。
注記
Nullable の使用は、ほとんど常にパフォーマンスを低下させます。この点を念頭に置いてデータベースを設計してください。
NULL の検索
列全体を読み取ることなく、null サブカラムを使って列内の NULL 値を特定できます。対応する値が NULL の場合は 1 を、それ以外の場合は 0 を返します。
例
クエリ:
結果: