Перейти к основному содержанию
ВходВыходПсевдоним

Описание

Похож на формат RowBinaryWithNamesAndTypes, но перед каждой ячейкой добавляется дополнительный байт, который указывает, нужно ли использовать значение DEFAULT для столбца, — точно так же, как в формате RowBinaryWithDefaults. Такая комбинация поддерживает INSERT при изменении схемы: отправитель может опускать столбцы в заголовке (тогда для них используется DEFAULT целевого столбца), а для любого передаваемого столбца может помечать отдельные ячейки как «использовать DEFAULT столбца», не смешивая это с NULL. Этот формат предназначен только для ввода.

Формат передачи данных

Заголовок идентичен RowBinaryWithNamesAndTypes:
  1. VarUInt с числом столбцов N.
  2. N значений String с префиксом длины, содержащих имена столбцов.
  3. N типов столбцов — либо в виде текстовых имен, либо в компактном двоичном кодировании, в зависимости от настроек output_format_binary_encode_types_in_binary_format / input_format_binary_decode_types_in_binary_format.
После заголовка каждая строка состоит из N ячеек. Для каждой ячейки:
  • Один байт-маркер UInt8.
    • 0x01 — использовать выражение DEFAULT целевого столбца. Байты значения после этого не следуют.
    • 0x00 — далее идет значение, сериализованное с помощью сериализатора RowBinary для типа столбца. Для Nullable(T) байты значения начинаются с Nullable null-байта (0 для не-NULL, 1 для NULL), затем идет внутреннее значение, если оно не равно NULL.

Значения по умолчанию и NULL

Маркер значения по умолчанию для каждой ячейки и встроенный null-байт в Nullable независимы друг от друга. Столбец Nullable(UInt32) DEFAULT 42 можно передавать тремя разными способами для каждой строки:
БайтыЗначение
01Использовать DEFAULT 42.
00 01Сначала путь значения, затем NULL через тип Nullable.
00 00 …Сначала путь значения, затем ненулевое внутреннее значение.

Изменение схемы

СлучайПоведение
Столбец полностью отсутствует в заголовке файлаЗаполняется в целевой таблице с помощью 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 │
└────┘
  • В заголовке указан один столбец с именем x типа Nullable(UInt32).
  • Единственная ячейка использует маркер 0x01, что означает “использовать DEFAULT 42”.

Настройки формата

Следующие настройки общие для всех форматов типа RowBinary.
НастройкаОписаниеПо умолчанию
format_binary_max_string_sizeМаксимально допустимый размер значения String в формате RowBinary.1GiB
output_format_binary_encode_types_in_binary_formatПозволяет записывать типы в заголовке с использованием двоичного кодирования вместо строк с именами типов в выходном формате RowBinaryWithNamesAndTypes.false
input_format_binary_decode_types_in_binary_formatПозволяет читать типы в заголовке с использованием двоичного кодирования вместо строк с именами типов во входном формате RowBinaryWithNamesAndTypes.false
output_format_binary_write_json_as_stringПозволяет записывать значения типа данных JSON как значения JSON типа String в выходном формате RowBinary.false
input_format_binary_read_json_as_stringПозволяет читать значения типа данных JSON как значения JSON типа String во входном формате RowBinary.false
Последнее изменение 10 июня 2026 г.