Использование родных и двоичных форматов в ClickHouse
ClickHouse поддерживает несколько двоичных форматов, которые обеспечивают лучшую производительность и эффективность использования пространства. Двоичные форматы также безопасны с точки зрения кодировки символов, так как данные сохраняются в двоичном формате.
Мы собираемся использовать таблицу some_data table и данные для демонстрации, не стесняйтесь воспроизводить это на своей инстанции ClickHouse.
Экспорт в родном формате ClickHouse
Наиболее эффективный формат данных для экспорта и импорта данных между узлами ClickHouse — это Native формат. Экспорт осуществляется с использованием оператора 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
Для работы с 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 форматы
- Регулярные выражения и шаблоны
- Родные и двоичные форматы
- SQL форматы
А также ознакомьтесь с clickhouse-local - портативным полнофункциональным инструментом для работы с локальными/удалёнными файлами без запуска сервера ClickHouse.