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

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

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

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

Экспорт в родном формате ClickHouse

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

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

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

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

подсказка

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

В производственной среде мы используем 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:

Протокол Buffers

Not supported in ClickHouse Cloud

Чтобы работать с Протоколами 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.