Learning Platform
Глоссарий Troubleshooting
Урок 12.07 · 25 мин
Продвинутый
FORMATParquetORCArrowAvroCSVJSON

FORMAT Clause: Multi-format I/O

ClickHouse нативно читает и пишет десятки форматов без внешних конвертеров. Один и тот же движок обрабатывает Parquet, ORC, Apache Arrow, Avro, CSV, JSON и многое другое — через единый синтаксис FORMAT.


FORMAT для INSERT

При загрузке данных из внешнего источника указывается формат входного потока:

-- INSERT из stdin-pipe (clickhouse-client)
-- echo '{"id":1,"name":"Alice"}' | clickhouse-client --query="INSERT INTO t FORMAT JSONEachRow"

-- INSERT из S3 (Parquet файл)
INSERT INTO events
SELECT *
FROM s3('s3://bucket/events/2024-01/*.parquet', 'key', 'secret', 'Parquet');

-- INSERT с явным FORMAT (бинарный pipe через HTTP)
-- curl -X POST 'http://localhost:8123/?query=INSERT+INTO+t+FORMAT+Arrow' --data-binary @file.arrow

FORMAT для SELECT

При экспорте данных указывается формат выходного потока:

-- LINE-DELIMITED JSON (каждая строка — отдельный JSON-объект)
SELECT user_id, event_type, ts
FROM events
FORMAT JSONEachRow;

-- CSV для Excel / pandas
SELECT *
FROM events
FORMAT CSV;

-- Apache Arrow IPC (для zero-copy с Python/Spark)
SELECT *
FROM events
FORMAT Arrow;

-- Native бинарный (server-to-server, самый быстрый)
SELECT *
FROM events
FORMAT Native;

Сравнение ключевых форматов

Форматы ClickHouse: read/write/use case
ФорматЗаголовок: формат — название формата. Все форматы в этой таблице поддерживаются ClickHouse нативно без внешних зависимостей.
ReadRead: ClickHouse умеет читать этот формат через FORMAT clause в SELECT ... FROM file/s3/url или через INSERT INTO t FORMAT X.
WriteWrite: ClickHouse умеет записывать в этот формат через SELECT ... FORMAT X или INSERT INTO ... SELECT ... FORMAT X.
Use caseUse case: типичный сценарий использования формата в production.
ParquetParquet: Apache Parquet — колоночный формат со встроенной схемой и статистикой. Схема хранится в footer файла. Поддерживает snappy/zstd/gzip компрессию. Стандарт де-факто для data lake хранилищ (S3, GCS, Azure ADLS).
даParquet: ClickHouse читает Parquet через s3(), file(), url() или прямой FORMAT.
даParquet: ClickHouse пишет SELECT ... FORMAT Parquet напрямую в stdout или через INTO OUTFILE.
S3 data lakeParquet: S3 data lake storage. Стандарт для Iceberg, Delta Lake, Hudi. Оптимален для batch аналитики с column pruning и predicate pushdown.
ORCORC: Optimized Row Columnar — колоночный формат Hadoop-экосистемы. Встроенная Bloom-фильтрация и min/max статистика по stripe. Используется в Hive, Spark, Presto. Менее распространён вне Hadoop, чем Parquet.
даORC: ClickHouse читает ORC файлы нативно.
даORC: ClickHouse пишет ORC через SELECT ... FORMAT ORC.
Hadoop-экосистемаORC: Hadoop-экосистема (Hive, Spark), interop с Hive Metastore, data lake поверх HDFS.
ArrowArrow: Apache Arrow IPC Streaming/File format. Columnar layout в памяти с zero-copy при передаче между процессами. Используется PyArrow, Pandas (read_feather), DuckDB, DataFusion. Идеален для in-process аналитики.
даArrow: ClickHouse читает Arrow IPC format.
даArrow: ClickHouse пишет SELECT ... FORMAT Arrow — подходит для передачи в Python/Pandas без десериализации через PyArrow.
Zero-copy IPCArrow: Zero-copy IPC между ClickHouse и Python/DataFusion/DuckDB. Минимальные overhead при inter-process analytics.
AvroAvro: Apache Avro — бинарный формат со schema evolution. Schema хранится отдельно (Schema Registry) или внутри файла (.avsc). Поддерживает backward/forward schema compatibility. Стандарт для Kafka-сообщений с версионированием схемы.
даAvro: ClickHouse читает Avro файлы (бинарный формат).
даAvro: ClickHouse пишет SELECT ... FORMAT Avro.
Schema evolutionAvro: Schema evolution с Registry. Kafka-сообщения, где схема часто меняется. Используй AvroConfluent для Kafka с Confluent Schema Registry.
CSVCSV: Comma-Separated Values. Универсальный текстовый формат, читаемый человеком. Не содержит типовой информации. ClickHouse поддерживает CSVWithNames (с заголовком), CSVWithNamesAndTypes.
даCSV: ClickHouse читает CSV, CSVWithNames, CSVWithNamesAndTypes.
даCSV: ClickHouse пишет CSV — подходит для Excel, Google Sheets, pandas.read_csv.
Universal exchangeCSV: Универсальный обмен данными с внешними системами (Excel, ETL-инструменты, legacy системы).
JSONEachRowJSONEachRow: Line-delimited JSON (NDJSON/newline-delimited JSON). Каждая строка таблицы — отдельный JSON-объект. HTTP-дружественный формат: легко читать построчно, не нужен полный буффер в памяти.
даJSONEachRow: ClickHouse читает line-delimited JSON (NDJSON). Pipe-friendly: stdin/stdout.
даJSONEachRow: ClickHouse пишет SELECT ... FORMAT JSONEachRow — стандарт для HTTP API ClickHouse.
HTTP API / streamingJSONEachRow: HTTP API, curl-запросы, REST интеграции, real-time streaming через HTTP. Стандарт по умолчанию для HTTP-интерфейса ClickHouse.
NativeNative: Нативный бинарный протокол ClickHouse. Колоночный layout, типозависимое кодирование. Используется clickhouse-client, server-to-server репликация, INSERT через native TCP (порт 9000). Самый быстрый формат.
даNative: clickhouse-client и driver'ы (clickhouse-driver Python, go-clickhouse) используют Native формат по TCP порту 9000.
даNative: INSERT/SELECT между серверами ClickHouse используют Native format — минимальный overhead.
Server-to-serverNative: Server-to-server (Distributed queries, репликация), clickhouse-client CLI. Максимальная производительность.

AvroConfluent: Kafka + Schema Registry

Для Kafka с Confluent Schema Registry используется специальный формат AvroConfluent, который декодирует Magic Byte и Schema ID в начале каждого Kafka-сообщения:

-- Kafka Engine с AvroConfluent format
CREATE TABLE events_kafka_queue
(
    user_id    UInt64,
    event_type String,
    ts         DateTime
)
ENGINE = Kafka
SETTINGS
    kafka_broker_list    = 'kafka:9092',
    kafka_topic_list     = 'events',
    kafka_group_name     = 'clickhouse_consumer',
    kafka_format         = 'AvroConfluent',
    format_avro_schema_registry_url = 'http://schema-registry:8081';

AvroConfluent автоматически:

  1. Читает Magic Byte (0x00) + Schema ID (4 bytes) из начала каждого сообщения
  2. Загружает схему из Schema Registry по ID
  3. Десериализует Avro payload в колонки ClickHouse

Ключевые выводы

  1. ClickHouse читает и пишет десятки форматов через единый FORMAT clause — без внешних конвертеров.
  2. Parquet — стандарт для S3 data lake storage: columnar, встроенная схема, column pruning, predicate pushdown.
  3. AvroConfluent — специальный формат для Kafka с Confluent Schema Registry: декодирует Magic Byte и загружает схему автоматически.
  4. Arrow — для zero-copy IPC между ClickHouse и Python/DataFusion/DuckDB: минимальные overhead.
  5. JSONEachRow — стандарт для HTTP API ClickHouse: line-delimited JSON, streaming-friendly, curl-compatible.
  6. Native — самый быстрый формат: используется clickhouse-client и server-to-server коммуникацией (port 9000).
Parquet: row groups, column chunks и физическая организация файла Arrow Flight: zero-copy передача данных между системами

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 3. Команда строит data lake в S3: данные хранятся партиционированно по дате, используются Apache Spark и ClickHouse для аналитики. Какой формат хранения наиболее подходит для максимальной совместимости и производительности аналитических запросов?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 11