説明
RowBinaryWithNamesAndTypes フォーマットに似ていますが、各セルの前に 1 バイト追加されており、そのカラムの DEFAULT 値を使用するかどうかを示します。これは RowBinaryWithDefaults フォーマットとまったく同じです。この組み合わせにより、スキーマの進化に対応した INSERT をサポートします。書き込み側はヘッダーからカラムを省略でき、その場合は対象カラムの DEFAULT が使用されます。さらに、送信するカラムについては、個々のセルごとに「そのカラムの DEFAULT を使う」と指定でき、これを NULL と混同せずに扱えます。
このフォーマットは入力専用です。
ワイヤ形式
RowBinaryWithNamesAndTypes と同一です。
- カラム数
Nを表すVarUInt。 - カラム名を格納した、長さプレフィックス付きの
StringがN個。 N個のカラム型 — テキスト名、またはコンパクトなバイナリエンコーディングのいずれかで、output_format_binary_encode_types_in_binary_format/input_format_binary_decode_types_in_binary_format設定で制御されます。
N 個のセルで構成されます。各セルについて:
- 1 バイトの
UInt8マーカーバイト。0x01— 対象カラムのDEFAULT式を使用します。後続する値バイトはありません。0x00— 値が続き、カラム型のRowBinaryシリアライザーでシリアライズされます。Nullable(T)の場合、値バイトはNullableの ヌルバイト (非NULLは0、NULL は1) で始まり、非NULLであればその後に内部値が続きます。
デフォルト値と NULL
Nullable に組み込まれているヌルバイトは独立しています。Nullable(UInt32) DEFAULT 42 カラムは、各行ごとに次の 3 通りで送信できます。
スキーマの進化
使用例
Query
Response
- ヘッダーには、
Nullable(UInt32)型のxという名前のカラムが 1 つあります。 - その 1 つのセルではマーカー
0x01が使われ、“DEFAULT 42を使用する” ことを意味します。
フォーマット設定
RowBinary 系フォーマットに共通です。