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

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

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

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

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

Наиболее эффективный формат данных для экспорта и импорта данных между узлами ClickHouse — это Native формат. Экспорт осуществляется с использованием оператора 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

Для работы с 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.