Перейти к основному содержанию
Перейти к основному содержанию

CapnProto

Not supported in ClickHouse Cloud
ВходВыходПсевдоним

Описание

Формат CapnProto — это двоичный формат сообщений, похожий на формат Protocol Buffers и Thrift, но, в отличие от JSON или MessagePack, не имеет с ними общего. Сообщения CapnProto строго типизированы и не являются самоописательными, то есть им требуется внешнее описание схемы. Схема применяется на лету и кэшируется для каждого запроса.

См. также Схема формата.

Соответствие типов данных

Приведённая ниже таблица показывает поддерживаемые типы данных и то, как они сопоставляются с типами данных ClickHouse в запросах INSERT и SELECT.

Тип данных CapnProto (INSERT)Тип данных ClickHouseТип данных CapnProto (SELECT)
UINT8, BOOLUInt8UINT8
INT8Int8INT8
UINT16UInt16, DateUINT16
INT16Int16INT16
UINT32UInt32, DateTimeUINT32
INT32Int32, Decimal32INT32
UINT64UInt64UINT64
INT64Int64, DateTime64, Decimal64INT64
FLOAT32Float32FLOAT32
FLOAT64Float64FLOAT64
TEXT, DATAString, FixedStringTEXT, DATA
union(T, Void), union(Void, T)Nullable(T)union(T, Void), union(Void, T)
ENUMEnum(8/16)ENUM
LISTArrayLIST
STRUCTTupleSTRUCT
UINT32IPv4UINT32
DATAIPv6DATA
DATAInt128/UInt128/Int256/UInt256DATA
DATADecimal128/Decimal256DATA
STRUCT(entries LIST(STRUCT(key Key, value Value)))MapSTRUCT(entries LIST(STRUCT(key Key, value Value)))
  • Целочисленные типы могут быть преобразованы друг в друга при вводе и выводе данных.
  • Для работы с Enum в формате CapnProto используйте настройку format_capn_proto_enum_comparising_mode.
  • Массивы могут быть вложенными и могут иметь значение типа Nullable в качестве аргумента. Типы Tuple и Map также могут быть вложенными.

Пример использования

Вставка и выборка данных

Вы можете вставить данные формата CapnProto из файла в таблицу ClickHouse с помощью следующей команды:

$ cat capnproto_messages.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_schema = 'schema:Message' FORMAT CapnProto"

где файл schema.capnp выглядит следующим образом:

struct Message {
  SearchPhrase @0 :Text;
  c @1 :Uint64;
}

Вы можете выбрать данные из таблицы ClickHouse и сохранить их в файл в формате CapnProto, используя следующую команду:

$ clickhouse-client --query = "SELECT * FROM test.hits FORMAT CapnProto SETTINGS format_schema = 'schema:Message'"

Использование автоматически сгенерированной схемы

Если у вас нет внешней схемы CapnProto для ваших данных, вы все равно можете считывать и выводить данные в формате CapnProto, используя автоматически сгенерированную схему.

Например:

SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS format_capn_proto_use_autogenerated_schema=1

В этом случае ClickHouse автоматически сгенерирует схему CapnProto в соответствии со структурой таблицы с помощью функции structureToCapnProtoSchema и будет использовать эту схему для сериализации данных в формате CapnProto.

Вы также можете прочитать файл CapnProto с автоматически сгенерированной схемой (в этом случае файл должен быть создан с использованием той же схемы):

$ cat hits.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_capn_proto_use_autogenerated_schema=1 FORMAT CapnProto"

Настройки формата

Настройка format_capn_proto_use_autogenerated_schema включена по умолчанию и применяется, если параметр format_schema не задан.

Вы также можете сохранить автоматически сгенерированную схему в файл при операциях ввода/вывода, используя настройку output_format_schema.

Например:

SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS 
    format_capn_proto_use_autogenerated_schema=1,
    output_format_schema='path/to/schema/schema.capnp'

В этом случае автоматически сгенерированная схема CapnProto будет сохранена в файле path/to/schema/schema.capnp.