Клиентские пакеты
| значение | название | описание |
|---|---|---|
| 0 | Hello | Начало рукопожатия клиента |
| 1 | Query | Запрос на выполнение запроса |
| 2 | Data | Блок с данными |
| 3 | Cancel | Отмена запроса |
| 4 | Ping | Запрос Ping |
| 5 | TableStatus | Запрос статуса таблицы |
Data может быть сжато.
Hello
Например, мы Go Client v1.10, который поддерживает 54451 версию протокола и
хочет подключиться к базе данных default с пользователем default и паролем secret.
| поле | тип | значение | описание |
|---|---|---|---|
| client_name | String | "Go Client" | Название реализации клиента |
| version_major | UVarInt | 1 | Основная версия клиента |
| version_minor | UVarInt | 10 | Минорная версия клиента |
| protocol_version | UVarInt | 54451 | Версия протокола TCP |
| database | String | "default" | Название базы данных |
| username | String | "default" | Имя пользователя |
| password | String | "secret" | Пароль |
Версия протокола
Версия протокола - это версия протокола TCP клиента.
Обычно она равна последней совместимой версии сервера, но не следует её с ней путать.
По умолчанию
Все значения должны быть явно указаны, на стороне сервера нет значений по умолчанию.
На стороне клиента используйте базу данных "default", имя пользователя "default" и "" (пустую строку)
в качестве значений по умолчанию.
Запрос
| поле | тип | значение | описание |
|---|---|---|---|
| query_id | String | 1ff-a123 | Идентификатор запроса, может быть UUIDv4 |
| client_info | ClientInfo | См. тип | Данные о клиенте |
| settings | Settings | См. тип | Список настроек |
| secret | String | secret | Секрет для межсерверной связи |
| stage | UVarInt | 2 | Выполнение до стадии запроса |
| compression | UVarInt | 0 | Отключено=0, включено=1 |
| body | String | SELECT 1 | Текст запроса |
Информация о клиенте
| поле | тип | описание |
|---|---|---|
| query_kind | byte | None=0, Initial=1, Secondary=2 |
| initial_user | String | Начальный пользователь |
| initial_query_id | String | Идентификатор начального запроса |
| initial_address | String | Начальный адрес |
| initial_time | Int64 | Начальное время |
| interface | byte | TCP=1, HTTP=2 |
| os_user | String | Пользователь ОС |
| client_hostname | String | Имя хоста клиента |
| client_name | String | Название клиента |
| version_major | UVarInt | Основная версия клиента |
| version_minor | UVarInt | Минорная версия клиента |
| protocol_version | UVarInt | Версия протокола клиента |
| quota_key | String | Ключ квоты |
| distributed_depth | UVarInt | Глубина распределенности |
| version_patch | UVarInt | Версия патча клиента |
| otel | Bool | Полигоны трассировки присутствуют |
| trace_id | FixedString(16) | Идентификатор трассировки |
| span_id | FixedString(8) | Идентификатор спана |
| trace_state | String | Состояние трассировки |
| trace_flags | Byte | Флаги трассировки |
Настройки
| поле | тип | значение | описание |
|---|---|---|---|
| key | String | send_logs_level | Ключ настройки |
| value | String | trace | Значение настройки |
| important | Bool | true | Может быть проигнорирована или нет |
Закодировано в виде списка, пустой ключ и значение обозначают конец списка.
Стадия
| значение | название | описание |
|---|---|---|
| 0 | FetchColumns | Только получение типов колонок |
| 1 | WithMergeableState | До состояния слива |
| 2 | Complete | До полной завершенности (должно быть по умолчанию) |
Данные
| поле | тип | описание |
|---|---|---|
| info | BlockInfo | Закодированная информация о блоке |
| columns | UVarInt | Количество колонок |
| rows | UVarInt | Количество строк |
| columns | []Column | Колонки с данными |
Колонка
| поле | тип | значение | описание |
|---|---|---|---|
| name | String | foo | Название колонки |
| type | String | DateTime64(9) | Тип колонки |
| data | bytes | ~ | Данные колонки |
Отмена
Нет тела пакета. Сервер должен отменить запрос.
Ping
Нет тела пакета. Сервер должен ответить pong.