Какие существуют форматы хранения данных, помимо CSV и JSON?

«Какие существуют форматы хранения данных, помимо CSV и JSON?» — вопрос из категории Моделирование данных и DWH, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте DWH и аналитических систем, помимо CSV и JSON, активно используются следующие форматы:

Колоночные форматы (оптимизированы для аналитики):

  • Parquet — открытый формат с высокой степенью сжатия, поддерживает вложенные структуры и эффективное отсечение столбцов (column pruning).
  • ORC (Optimized Row Columnar) — похож на Parquet, изначально создан для экосистемы Hadoop/Hive.
  • Apache Arrow — in-memory формат для быстрого обмена данными между системами (например, между Pandas и Spark).

Форматы со схемой (Schema-based):

  • Avro — использует JSON для описания схемы, но хранит данные в бинарном виде. Отлично подходит для потоковой обработки (Kafka) благодаря поддержке эволюции схем (schema evolution).
  • Protocol Buffers (Protobuf) — бинарный формат от Google со строгой типизацией и компактным размером, часто используется в gRPC.

Специализированные форматы:

  • HDF5 — иерархический формат для хранения больших объемов научных данных.

Выбор формата зависит от паттерна доступа:

  • Для ETL/ELT-процессов и аналитических запросов — Parquet или ORC.
  • Для потоковой передачи данных с меняющейся схемой — Avro.
  • Для межсервисного взаимодействия (RPC) — Protobuf.

Пример записи в Parquet с помощью PySpark:

df = spark.read.csv("input.csv", header=True)
df.write.parquet("output.parquet")