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