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 data | Row 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 решениях.