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