Использование нативных и бинарных форматов в 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.