Использование родных и двоичных форматов в ClickHouse
ClickHouse поддерживает несколько двоичных форматов, которые обеспечивают лучшую производительность и эффективность использования пространства. Двоичные форматы также безопасны в кодировке символов, так как данные сохраняются в двоичном виде.
Мы будем использовать некоторые данные таблицы и данные для демонстрации, не стесняйтесь воспроизводить это на вашей инстанции 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:
Протокол Buffers
Чтобы работать с Протоколами 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.