Использование нативных и бинарных форматов в 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:
Protocol Buffers
Для работы с Protocol Buffers сначала нужно определить файл схемы:
Путь к этому файлу схемы (schema.proto
в нашем случае) задается в параметре настроек format_schema
для формата Protobuf:
Это сохраняет данные в файл proto.bin. ClickHouse также поддерживает импорт данных Protobuf, а также вложенных сообщений. Рассмотрите возможность использования ProtobufSingle для работы с одним сообщением Protocol Buffer (в этом случае ограничения по длине будут опущены).
Cap'n Proto
Другим популярным форматом бинарной сериализации, поддерживаемым ClickHouse, является Cap'n Proto. Аналогично формату Protobuf
, нам нужно определить файл схемы (schema.capnp
) в нашем примере:
Теперь мы можем импортировать и экспортировать с помощью формата CapnProto и этой схемы:
Обратите внимание, что нам нужно было привести столбец Date
к типу UInt32
, чтобы соответствовать соответствующим типам.
Другие форматы
ClickHouse вводит поддержку множества форматов, как текстовых, так и бинарных, чтобы охватить различные сценарии и платформы. Изучите больше форматов и способы работы с ними в следующих статьях:
- CSV и TSV форматы
- Parquet
- JSON форматы
- Регулярные выражения и шаблоны
- Нативные и бинарные форматы
- SQL форматы
А также проверьте clickhouse-local - переносной полнофункциональный инструмент для работы с локальными/удаленными файлами без запуска сервера ClickHouse.