Protobuf
| Вход | Выход | Псевдоним |
|---|---|---|
| ✔ | ✔ |
Описание
Формат 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.