Apache ORC (Optimized Row Columnar) — это открытый колоночный (columnar) формат хранения данных, предназначенный для эффективного хранения и быстрого выполнения аналитических запросов в экосистеме Big Data. Изначально ORC был разработан компанией Hortonworks для улучшения производительности Apache Hive, но сейчас широко используется в Hadoop-экосистеме и облачных решениях.


📌 Основные особенности Apache ORC

  • Колоночное хранение данных.
  • Высокая эффективность сжатия данных.
  • Хранение статистик и метаданных (min, max, sum и др.) для оптимизации чтения.
  • Поддержка Schema Evolution (эволюция схемы данных).
  • Оптимизирован для работы с экосистемой Hadoop (Hive, Spark, Presto/Trino).

📌 Как устроен файл Apache ORC?

Файл ORC состоит из следующих элементов:

  • Stripe (аналогично Row Group в Parquet) — набор строк (по умолчанию ~250 MB).
  • Column (колонки внутри Stripe) — отдельное хранение каждой колонки.
  • Index data и Footer — метаданные и статистики для ускорения поиска и фильтрации.
ORC-файл
├── Stripe 1
│   ├── Column data (колонки хранятся отдельно)
│   ├── Index data (статистики, индексы)
│   └── Footer (метаданные)
└── Stripe 2
    └── ...


📌 Чем Apache ORC отличается от Parquet?

Оба формата (Parquet и ORC) являются колоночными и предназначены для аналитики и хранения больших данных. Однако есть несколько важных отличий:

Характеристика🔸 Apache ORC🟢 Apache Parquet
Происхождение и экосистемаHortonworks (Hadoop-ориентирован)Twitter, Cloudera (универсален)
Структура файлаStripe → Column dataRow Group → Column chunk
Степень сжатияВысокаяВысокая (сравнима с ORC)
Скорость чтения запросовВысокаяВысокая
Производительность записиСредняяСредняя
Метаданные и индексыStripe-level (полосы данных)Row Group-level (группы строк)
Schema Evolution
Predicate Pushdown (фильтрация)✅ Хорошо развит✅ Хорошо развит
Поддержка экосистемыОтличная интеграция с Hive, HadoopУниверсален, поддерживается большинством Big Data инструментов
Популярность и сообществоСредняя (в Hadoop-экосистеме)Очень высокая (в Data Lakes и облаках)

📌 Когда использовать ORC, а когда Parquet?

🔸 Apache ORC — лучше, если:

  • Используете Hadoop-экосистему (Hive, Hortonworks, Presto на Hadoop).
  • Важна глубокая интеграция с Apache Hive.
  • Нужны развитые индексы и статистики на уровне Stripe.

🟢 Apache Parquet — лучше, если:

  • Используете облачные Data Lakes (S3, Azure, GCP).
  • Используете Spark, Presto/Trino, Dremio.
  • Важна максимальная производительность чтения аналитических запросов.
  • Нужно более широкое распространение и поддержка экосистемы.

🚀 Итоговые выводы

Apache ORC и Apache Parquet оба являются мощными колоночными форматами, предназначенными для аналитики больших данных:

  • Apache ORC особенно удобен в экосистеме Hadoop и Hive.
  • Apache Parquet получил более широкое распространение и подходит для использования в Cloud-архитектурах и Data Lake решениях.