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

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

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

Мы будем использовать some_data таблицу и данные для демонстрации, не стесняйтесь воспроизводить это на вашей инстансе 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:

Протокол Буферов

Not supported in ClickHouse Cloud

Для работы с Протоколом Буферов сначала необходимо определить файл схемы:

Путь к этому файлу схемы (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.