メインコンテンツへスキップ
入力出力エイリアス

説明

RowBinaryWithNamesAndTypes フォーマットに似ていますが、各セルの前に 1 バイト追加されており、そのカラムの DEFAULT 値を使用するかどうかを示します。これは RowBinaryWithDefaults フォーマットとまったく同じです。この組み合わせにより、スキーマの進化に対応した INSERT をサポートします。書き込み側はヘッダーからカラムを省略でき、その場合は対象カラムの DEFAULT が使用されます。さらに、送信するカラムについては、個々のセルごとに「そのカラムの DEFAULT を使う」と指定でき、これを NULL と混同せずに扱えます。 このフォーマットは入力専用です。

ワイヤ形式

ヘッダーは RowBinaryWithNamesAndTypes と同一です。
  1. カラム数 N を表す VarUInt
  2. カラム名を格納した、長さプレフィックス付きの StringN 個。
  3. 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 通りで送信できます。
BytesMeaning
01DEFAULT 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
SELECT * FROM format(
    'RowBinaryWithNamesAndTypesAndDefaults',
    'x Nullable(UInt32) DEFAULT 42',
    unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);
Response
┌──x─┐
│ 42 │
└────┘
  • ヘッダーには、Nullable(UInt32) 型の x という名前のカラムが 1 つあります。
  • その 1 つのセルではマーカー 0x01 が使われ、“DEFAULT 42 を使用する” ことを意味します。

フォーマット設定

以下の設定は、すべての RowBinary 系フォーマットに共通です。
設定説明デフォルト
format_binary_max_string_sizeRowBinary フォーマットで許可される String の最大サイズです。1GiB
output_format_binary_encode_types_in_binary_formatRowBinaryWithNamesAndTypes 出力フォーマットで、ヘッダー内の型を、型名の文字列ではなく binary encoding を使って書き込めるようにします。false
input_format_binary_decode_types_in_binary_formatRowBinaryWithNamesAndTypes 入力フォーマットで、ヘッダー内の型を、型名の文字列ではなく binary encoding を使って読み取れるようにします。false
output_format_binary_write_json_as_stringRowBinary 出力フォーマットで、JSON データ型の値を JSON String 値として書き込めるようにします。false
input_format_binary_read_json_as_stringRowBinary 入力フォーマットで、JSON データ型の値を JSON String 値として読み取れるようにします。false
最終更新日 2026年6月10日