| Вход | Выход | Псевдоним |
|---|---|---|
| ✔ | ✗ |
Описание
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 можно передавать тремя разными способами для каждой строки:
| Байты | Значение |
|---|---|
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
Response
- В заголовке указан один столбец с именем
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 |