クライアントパケット
| value | name | description |
|---|---|---|
| 0 | Hello | クライアントのハンドシェイク開始 |
| 1 | Query | クエリ要求 |
| 2 | Data | データブロック |
| 3 | Cancel | クエリのキャンセル |
| 4 | Ping | Ping リクエスト |
| 5 | TableStatus | テーブルステータスの要求 |
Data は圧縮可能です。
Hello
例えば、54451 のプロトコルバージョンをサポートする Go Client v1.10 を使用して、
default データベースに default ユーザー、secret パスワードで接続したいとします。
| field | type | value | description |
|---|---|---|---|
| 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" | パスワード |
Protocol version
プロトコルバージョンは、クライアントの TCP プロトコルのバージョンです。
通常、互換性のある最新のサーバーリビジョンと同じですが、 サーバーリビジョンそのものと混同してはいけません。
Defaults
すべての値は明示的に設定する必要があり、サーバー側にはデフォルト値はありません。
クライアント側では、デフォルトとして "default" データベース、"default" ユーザー名、
およびパスワードには ""(空文字列)を使用してください。
クエリ
| field | type | value | description |
|---|---|---|---|
| query_id | String | 1ff-a123 | クエリ ID。UUIDv4 を利用可能 |
| client_info | ClientInfo | 型を参照 | クライアントに関するデータ |
| settings | Settings | 型を参照 | 設定の一覧 |
| secret | String | secret | サーバー間シークレット |
| stage | UVarInt | 2 | 指定したクエリステージまで実行 |
| compression | UVarInt | 0 | 無効=0、有効=1 |
| body | String | SELECT 1 | クエリテキスト |
Client info
| field | type | description |
|---|---|---|
| query_kind | byte | None=0、Initial=1、Secondary=2 |
| initial_user | String | 初期ユーザー |
| initial_query_id | String | 初期クエリ ID |
| initial_address | String | 初期アドレス |
| initial_time | Int64 | 初期時刻 |
| interface | byte | TCP=1、HTTP=2 |
| os_user | String | OS ユーザー |
| 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) | トレース ID |
| span_id | FixedString(8) | スパン ID |
| trace_state | String | トレースの状態 |
| trace_flags | Byte | トレースのフラグ |
Settings
| field | type | value | description |
|---|---|---|---|
| key | String | send_logs_level | 設定のキー |
| value | String | trace | 設定の値 |
| important | Bool | true | 無視可能かどうかを示す |
リストとしてエンコードされており、key と value が空の要素が現れるとリストの終端を示します。
Stage
| value | name | description |
|---|---|---|
| 0 | FetchColumns | 列の型のみを取得する |
| 1 | WithMergeableState | マージ可能な状態になるまで |
| 2 | Complete | 完全に完了するまで(デフォルトであるべき値) |
データ
| field | type | description |
|---|---|---|
| info | BlockInfo | エンコードされたブロック情報 |
| columns | UVarInt | 列数 |
| rows | UVarInt | 行数 |
| columns | []列 | データを含む列 |
列
| field | type | value | description |
|---|---|---|---|
| name | String | foo | 列名 |
| type | String | DateTime64(9) | 列の型 |
| data | bytes | ~ | 列データ |
キャンセル
パケット本体はありません。サーバーはクエリをキャンセルする必要があります。
Ping
パケットの本体はありません。サーバーはpongで応答する必要があります。