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

Protobuf

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

Описание

Формат Protobuf — это формат Protocol Buffers.

Этот формат требует внешнюю схему формата, которая кэшируется между запросами.

ClickHouse поддерживает:

  • обе синтаксиса proto2 и proto3.
  • поля Repeated/optional/required.

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

Основные примеры

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

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

Чтобы найти соответствие между столбцами таблицы и полями типа сообщения Protocol Buffers, ClickHouse сравнивает их имена. Это сравнение регистронезависимо, и символы _ (подчеркивание) и . (точка) считаются равными. Если типы столбца и поля сообщения Protocol Buffers различны, то применяется необходимое преобразование.

Поддерживаются вложенные сообщения. Например, для поля z в следующем типе сообщения:

ClickHouse пытается найти столбец с именем x.y.z (или x_y_z или X.y_Z и так далее).

Вложенные сообщения подходят для ввода или вывода вложенных структур данных.

Значения по умолчанию, определенные в схеме protobuf, подобной следующей, не применяются, вместо этого используются умолчания таблицы:

ClickHouse вводит и выводит сообщения protobuf в формате length-delimited. Это означает, что перед каждым сообщением его длина должна быть записана как переменная длина целое число (varint).

Смотрите также: как читать/записывать сообщения protobuf с длиной разделителями на популярных языках.

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

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

Например:

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

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

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

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

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

Сброс кэша Protobuf

Чтобы перезагрузить схему Protobuf, загруженную из format_schema_path, используйте оператор SYSTEM DROP ... FORMAT CACHE.

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