CapnProto
| Ввод | Вывод | Псевдоним | 
|---|---|---|
| ✔ | ✔ | 
Описание
Формат CapnProto — это бинарный формат сообщений, похожий на формат Protocol Buffers и Thrift, но не похожий на JSON или MessagePack.
Сообщения CapnProto строго типизированы и не являются самодокументируемыми, что означает, что им требуется внешнее описание схемы. Схема применяется на лету и кешируется для каждого запроса.
Смотрите также Схема Формата.
Соответствие Типов Данных
В таблице ниже показаны поддерживаемые типы данных и как они соответствуют типам данных ClickHouse в запросах INSERT и SELECT.
| Тип данных CapnProto ( INSERT) | Тип данных ClickHouse | Тип данных CapnProto ( SELECT) | 
|---|---|---|
| UINT8,BOOL | UInt8 | UINT8 | 
| INT8 | Int8 | INT8 | 
| UINT16 | UInt16, Date | UINT16 | 
| INT16 | Int16 | INT16 | 
| UINT32 | UInt32, DateTime | UINT32 | 
| INT32 | Int32, Decimal32 | INT32 | 
| UINT64 | UInt64 | UINT64 | 
| INT64 | Int64, DateTime64, Decimal64 | INT64 | 
| FLOAT32 | Float32 | FLOAT32 | 
| FLOAT64 | Float64 | FLOAT64 | 
| TEXT, DATA | String, FixedString | TEXT, DATA | 
| union(T, Void), union(Void, T) | Nullable(T) | union(T, Void), union(Void, T) | 
| ENUM | Enum(8/16) | ENUM | 
| LIST | Array | LIST | 
| STRUCT | Tuple | STRUCT | 
| UINT32 | IPv4 | UINT32 | 
| DATA | IPv6 | DATA | 
| DATA | Int128/UInt128/Int256/UInt256 | DATA | 
| DATA | Decimal128/Decimal256 | DATA | 
| STRUCT(entries LIST(STRUCT(key Key, value Value))) | Map | STRUCT(entries LIST(STRUCT(key Key, value Value))) | 
- Целочисленные типы могут быть преобразованы друг в друга во время ввода/вывода.
- Для работы с Enumв формате CapnProto используйте настройку format_capn_proto_enum_comparising_mode.
- Массивы могут быть вложенными и могут иметь значение типа Nullableв качестве аргумента. ТипыTupleиMapтакже могут быть вложенными.
Пример Использования
Вставка и Выбор Данных
Вы можете вставить данные CapnProto из файла в таблицу ClickHouse с помощью следующей команды:
Где schema.capnp выглядит следующим образом:
Вы можете выбрать данные из таблицы ClickHouse и сохранить их в какой-либо файл в формате CapnProto, используя следующую команду:
Использование Автосгенерированной Схемы
Если у вас нет внешней схемы CapnProto для ваших данных, вы все равно можете выводить/вводить данные в формате CapnProto, используя автосгенерированную схему.
Например:
В этом случае ClickHouse автоматически сгенерирует схему CapnProto в соответствии со структурой таблицы, используя функцию structureToCapnProtoSchema, и будет использовать эту схему для сериализации данных в формате CapnProto.
Вы также можете прочитать файл CapnProto с автосгенерированной схемой (в этом случае файл должен быть создан с использованием той же схемы):
Настройки Формата
Настройка format_capn_proto_use_autogenerated_schema включена по умолчанию и применяется, если format_schema не задан.
Вы также можете сохранить автосгенерированную схему в файл во время ввода/вывода, используя настройку output_format_schema.
Например:
В этом случае автосгенерированная схема CapnProto будет сохранена в файл path/to/schema/schema.capnp.
