CapnProto
Input | Output | Alias |
---|---|---|
✔ | ✔ |
Описание
Формат 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
.