Использование родных и бинарных форматов в 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:
Протокол Буферов
Для работы с Протоколом Буферов сначала необходимо определить файл схемы:
Путь к этому файлу схемы (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.