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

Описание

Похож на формат 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 можно передавать тремя разными способами для каждой строки:

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

Пример использования

Query
Response
  • В заголовке указан один столбец с именем x типа Nullable(UInt32).
  • Единственная ячейка использует маркер 0x01, что означает “использовать DEFAULT 42”.

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

Следующие настройки общие для всех форматов типа RowBinary.
Последнее изменение 10 июня 2026 г.