| 入力 | 出力 | エイリアス |
|---|---|---|
| ✔ | ✗ |
説明
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 通りで送信できます。
| Bytes | Meaning |
|---|---|
01 | DEFAULT 42 を使用します。 |
00 01 | 値パスに入り、その後 Nullable 型によって NULL を表します。 |
00 00 … | 値パスに入り、その後に NULL ではない内部値が続きます。 |
スキーマの進化
| ケース | 動作 |
|---|---|
| ファイルのヘッダーにカラムがまったく存在しない | insertDefaultsForNotSeenColumns によりターゲット側で補完されます。これは defaults_for_omitted_fields で制御されます。 |
ヘッダーにカラムが存在し、セルマーカーが 0x01 | 各行に対して insertDefault が実行されます。 |
ヘッダーにカラムが存在し、セルマーカーが 0x00 | 値は通常どおりパースされます。 |
| ヘッダーに余分なカラムがあり、ターゲットテーブルには存在しない | input_format_skip_unknown_fields = 1 の場合は何も通知されずに破棄されます (最初にマーカーが消費され、0x01 ならそれ以上は何も行われず、0x00 なら型付きの値がパースされたうえで破棄されます) 。 |
使用例
Query
Response
- ヘッダーには、
Nullable(UInt32)型のxという名前のカラムが 1 つあります。 - その 1 つのセルではマーカー
0x01が使われ、“DEFAULT 42を使用する” ことを意味します。
フォーマット設定
RowBinary 系フォーマットに共通です。
| 設定 | 説明 | デフォルト |
|---|---|---|
format_binary_max_string_size | RowBinary フォーマットで許可される String の最大サイズです。 | 1GiB |
output_format_binary_encode_types_in_binary_format | RowBinaryWithNamesAndTypes 出力フォーマットで、ヘッダー内の型を、型名の文字列ではなく binary encoding を使って書き込めるようにします。 | false |
input_format_binary_decode_types_in_binary_format | RowBinaryWithNamesAndTypes 入力フォーマットで、ヘッダー内の型を、型名の文字列ではなく binary encoding を使って読み取れるようにします。 | false |
output_format_binary_write_json_as_string | RowBinary 出力フォーマットで、JSON データ型の値を JSON String 値として書き込めるようにします。 | false |
input_format_binary_read_json_as_string | RowBinary 入力フォーマットで、JSON データ型の値を JSON String 値として読み取れるようにします。 | false |