Описание
RowBinaryWithNamesAndTypes, но перед каждой ячейкой добавляется дополнительный байт, который указывает, нужно ли использовать значение DEFAULT для столбца, — точно так же, как в формате RowBinaryWithDefaults. Такая комбинация поддерживает INSERT при изменении схемы: отправитель может опускать столбцы в заголовке (тогда для них используется DEFAULT целевого столбца), а для любого передаваемого столбца может помечать отдельные ячейки как «использовать DEFAULT столбца», не смешивая это с NULL.
Этот формат предназначен только для ввода.
Формат передачи данных
RowBinaryWithNamesAndTypes:
VarUIntс числом столбцовN.NзначенийStringс префиксом длины, содержащих имена столбцов.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)байты значения начинаются сNullablenull-байта (0для не-NULL,1для NULL), затем идет внутреннее значение, если оно не равно NULL.
Значения по умолчанию и NULL
Nullable независимы друг от друга. Столбец Nullable(UInt32) DEFAULT 42 можно передавать тремя разными способами для каждой строки:
Изменение схемы
Пример использования
Query
Response
- В заголовке указан один столбец с именем
xтипаNullable(UInt32). - Единственная ячейка использует маркер
0x01, что означает “использоватьDEFAULT 42”.
Настройки формата
RowBinary.