mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-10 09:32:06 +00:00
Improve documentation about protobuf format. (#5015)
This commit is contained in:
parent
29c92372a2
commit
18ddacc95e
@ -646,9 +646,9 @@ See also [Format Schema](#formatschema).
|
||||
|
||||
Protobuf - is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) format.
|
||||
|
||||
ClickHouse supports both `proto2` and `proto3`. Repeated/optional/required fields are supported.
|
||||
|
||||
This format requires an external format schema. The schema is cached between queries.
|
||||
ClickHouse supports both `proto2` and `proto3` syntaxes. Repeated/optional/required fields are supported.
|
||||
|
||||
Usage examples:
|
||||
|
||||
```sql
|
||||
@ -659,7 +659,7 @@ SELECT * FROM test.table FORMAT Protobuf SETTINGS format_schema = 'schemafile:Me
|
||||
cat protobuf_messages.bin | clickhouse-client --query "INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema='schemafile:MessageType'"
|
||||
```
|
||||
|
||||
Where the file `schemafile.proto` looks like this:
|
||||
where the file `schemafile.proto` looks like this:
|
||||
|
||||
```
|
||||
syntax = "proto3";
|
||||
@ -691,11 +691,13 @@ message MessageType {
|
||||
```
|
||||
|
||||
ClickHouse tries to find a column named `x.y.z` (or `x_y_z` or `X.y_Z` and so on).
|
||||
Nested messages are suitable to input or output a [nested data structures](../data_types/nested_data_structures/nested/).
|
||||
Nested messages are suitable to input or output a [nested data structures](../data_types/nested_data_structures/nested.md).
|
||||
|
||||
Default values defined in a `proto2` protobuf schema like this
|
||||
Default values defined in a protobuf schema like this
|
||||
|
||||
```
|
||||
syntax = "proto2";
|
||||
|
||||
message MessageType {
|
||||
optional int32 result_per_page = 3 [default = 10];
|
||||
}
|
||||
@ -703,6 +705,10 @@ message MessageType {
|
||||
|
||||
are not applied; the [table defaults](../query_language/create.md#create-default-values) are used instead of them.
|
||||
|
||||
ClickHouse inputs and outputs protobuf messages in the `length-delimited` format.
|
||||
It means before every message should be written its length as a [varint](https://developers.google.com/protocol-buffers/docs/encoding#varints).
|
||||
See also [how to read/write length-delimited protobuf messages in popular languages](https://cwiki.apache.org/confluence/display/GEODE/Delimiting+Protobuf+Messages).
|
||||
|
||||
## Format Schema {#formatschema}
|
||||
|
||||
The file name containing the format schema is set by the setting `format_schema`.
|
||||
|
@ -638,6 +638,8 @@ struct Message {
|
||||
Protobuf - формат [Protocol Buffers](https://developers.google.com/protocol-buffers/).
|
||||
|
||||
Формат нуждается во внешнем описании схемы. Схема кэшируется между запросами.
|
||||
ClickHouse поддерживает как синтаксис `proto2`, так и `proto3`; все типы полей (repeated/optional/required) поддерживаются.
|
||||
|
||||
Пример использования формата:
|
||||
|
||||
```sql
|
||||
@ -663,9 +665,9 @@ message MessageType {
|
||||
};
|
||||
```
|
||||
|
||||
Соответствие между столбцами таблицы и полями сообщения Protocol Buffers устанавливается по имени,
|
||||
Соответствие между столбцами таблицы и полями сообщения `Protocol Buffers` устанавливается по имени,
|
||||
при этом игнорируется регистр букв и символы `_` (подчеркивание) и `.` (точка) считаются одинаковыми.
|
||||
Если типы столбцов не соответствуют точно типам полей сообщения Protocol Buffers, производится необходимая конвертация.
|
||||
Если типы столбцов не соответствуют точно типам полей сообщения `Protocol Buffers`, производится необходимая конвертация.
|
||||
|
||||
Вложенные сообщения поддерживаются, например, для поля `z` в таком сообщении
|
||||
|
||||
@ -682,11 +684,13 @@ message MessageType {
|
||||
```
|
||||
|
||||
ClickHouse попытается найти столбец с именем `x.y.z` (или `x_y_z`, или `X.y_Z` и т.п.).
|
||||
Вложенные сообщения удобно использовать в качестве соответствия для [вложенной структуры данных](../data_types/nested_data_structures/nested/).
|
||||
Вложенные сообщения удобно использовать в качестве соответствия для [вложенной структуры данных](../data_types/nested_data_structures/nested.md).
|
||||
|
||||
Значения по умолчанию, определенные в схеме, например,
|
||||
|
||||
```
|
||||
syntax = "proto2";
|
||||
|
||||
message MessageType {
|
||||
optional int32 result_per_page = 3 [default = 10];
|
||||
}
|
||||
@ -694,6 +698,9 @@ message MessageType {
|
||||
|
||||
не применяются; вместо них используются определенные в таблице [значения по умолчанию](../query_language/create.md#create-default-values).
|
||||
|
||||
ClickHouse пишет и читает сообщения `Protocol Buffers` в формате `length-delimited`. Это означает, что перед каждым сообщением пишется его длина
|
||||
в формате [varint](https://developers.google.com/protocol-buffers/docs/encoding#varints). См. также [как читать и записывать сообщения Protocol Buffers в формате length-delimited в различных языках программирования](https://cwiki.apache.org/confluence/display/GEODE/Delimiting+Protobuf+Messages).
|
||||
|
||||
## Схема формата {#formatschema}
|
||||
|
||||
Имя файла со схемой записывается в настройке `format_schema`. При использовании форматов `Cap'n Proto` и `Protobuf` требуется указать схему.
|
||||
|
Loading…
Reference in New Issue
Block a user