Использование нативных и двоичных форматов в ClickHouse
ClickHouse поддерживает несколько двоичных форматов, что обеспечивает лучшую производительность и эффективность использования пространства. Двоичные форматы также безопасны с точки зрения кодирования символов, поскольку данные сохраняются в двоичном виде.
Мы будем использовать some_data таблицу и данные для демонстрации, не стесняйтесь воспроизводить это на своей инстанции ClickHouse.
Экспорт в нативный формат ClickHouse
Самым эффективным форматом данных для экспорта и импорта данных между узлами ClickHouse является Native формат. Экспорт выполняется с использованием оператора INTO OUTFILE
:
Это создаст data.clickhouse файл в нативном формате.
Импорт из нативного формата
Для импорта данных мы можем использовать file() для небольших файлов или для исследовательских целей:
При использовании функции file()
, с ClickHouse Cloud вам нужно будет выполнять команды в clickhouse client
на машине, где находится файл. Другой вариант - использовать clickhouse-local
для исследования файлов локально.
В production мы используем 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 форматы
- Regex и шаблоны
- Нативные и двоичные форматы
- SQL форматы
И также проверьте clickhouse-local - портативный полнофункциональный инструмент для работы с локальными/удалёнными файлами без запуска сервера ClickHouse.