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

Использование нативных и двоичных форматов в ClickHouse

ClickHouse поддерживает несколько двоичных форматов, что обеспечивает лучшую производительность и эффективность использования пространства. Двоичные форматы также безопасны с точки зрения кодирования символов, поскольку данные сохраняются в двоичном виде.

Мы будем использовать some_data таблицу и данные для демонстрации, не стесняйтесь воспроизводить это на своей инстанции ClickHouse.

Экспорт в нативный формат ClickHouse

Самым эффективным форматом данных для экспорта и импорта данных между узлами ClickHouse является Native формат. Экспорт выполняется с использованием оператора INTO OUTFILE:

Это создаст data.clickhouse файл в нативном формате.

Импорт из нативного формата

Для импорта данных мы можем использовать file() для небольших файлов или для исследовательских целей:

подсказка

При использовании функции file(), с ClickHouse Cloud вам нужно будет выполнять команды в clickhouse client на машине, где находится файл. Другой вариант - использовать clickhouse-local для исследования файлов локально.

В production мы используем FROM INFILE для импорта данных:

Сжатие нативного формата

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

Мы использовали сжатие LZ4 для экспорта. Мы должны указать это при импорте данных:

Экспорт в RowBinary

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

Это создаст data.binary файл в формате двоичных строк.

Исследование файлов RowBinary

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

Рекомендуется использовать RowBinaryWithNames, который также добавляет строку заголовка со списком колонок. RowBinaryWithNamesAndTypes также добавит дополнительную строку заголовка с типами колонок.

Импорт из файлов RowBinary

Для загрузки данных из файла RowBinary мы можем использовать оператор FROM INFILE:

Импортирование одного двоичного значения с использованием RawBLOB

Предположим, мы хотим прочитать весь двоичный файл и сохранить его в поле таблицы. Это случай, когда можно использовать RawBLOB формат. Этот формат можно использовать только с одно-колоночной таблицей:

Давайте сохраним файл изображения в таблицу images:

Мы можем проверить длину поля data, которая будет равна размеру исходного файла:

Экспорт данных RawBLOB

Этот формат также может использоваться для экспорта данных с помощью оператора INTO OUTFILE:

Обратите внимание, что нам пришлось использовать LIMIT 1, потому что экспорт больше одного значения создаст поврежденный файл.

MessagePack

ClickHouse поддерживает импорт и экспорт в MessagePack с использованием MsgPack. Чтобы экспортировать в формат MessagePack:

Чтобы импортировать данные из файла MessagePack:

Protocol Buffers

Not supported in ClickHouse Cloud

Для работы с Protocol Buffers мы сначала должны определить файл схемы:

Путь к этому файлу схемы (schema.proto в нашем случае) устанавливается в настройках format_schema для формата Protobuf:

Это сохраняет данные в файл proto.bin. ClickHouse также поддерживает импорт данных Protobuf, а также вложенных сообщений. Рассмотрите возможность использования ProtobufSingle для работы с одним сообщением Protocol Buffer (в этом случае длины разделителей будут опущены).

Cap’n Proto

Not supported in ClickHouse Cloud

Другой популярный формат двоичной сериализации, поддерживаемый ClickHouse, это Cap’n Proto. Подобно формату Protobuf, мы должны определить файл схемы (schema.capnp) в нашем примере:

Теперь мы можем импортировать и экспортировать, используя формат CapnProto и эту схему:

Обратите внимание, что нам пришлось преобразовать колонку Date в UInt32, чтобы совпадать с соответствующими типами.

Другие форматы

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

И также проверьте clickhouse-local - портативный полнофункциональный инструмент для работы с локальными/удалёнными файлами без запуска сервера ClickHouse.