🎯 Definicja

ORC (Optimized Row Columnar) to zorientowany kolumnowo format plików zaprojektowany z myślą o wysokowydajnym przechowywaniu i przetwarzaniu danych dużej skali — zwłaszcza w ekosystemie Hadoop/Hive. Format ORC został opracowany przez firmę Hortonworks i jest jednym z najwydajniejszych sposobów zapisu danych kolumnowych w systemach typu Big Data (np. Apache Hive, Apache Spark).

🔑 Kluczowe punkty

  • ORC to format kolumnowy: dane są przechowywane kolumna po kolumnie zamiast wiersz po wierszu.
  • Optymalizowany pod kątem kompresji, odczytu selektywnego i ograniczenia rozmiaru danych.
  • Używany najczęściej w połączeniu z Apache Hive lub silnikami typu Presto, Trino, Spark.
  • Przechowuje zarówno dane użytkownika, jak i metadane (statystyki, indeksy) w jednym pliku.
  • Wspiera predicate pushdown, compression, i splity danych (stripes, stripes footers, indexes).

📚 Szczegółowe wyjaśnienie

Jak działa ORC?

Dane są podzielone na jednostki fizyczne zwane “stripes”, gdzie:

  • Każdy stripe zawiera dane kolumnowe, indeksy i statystyki.
  • Zawarte są footery i metadane globalne, dzięki czemu można wydajnie nawigować po pliku bez ładowania wszystkiego do pamięci.
  • Obsługuje kompresję na poziomie kolumn, np. Zlib, Snappy, LZO.

Dlaczego ORC?

ZaletaOpis
Wydajność odczytuTylko potrzebne kolumny są ładowane do pamięci
Oszczędność miejscaMałe rozmiary plików dzięki kompresji kolumnowej i statystykom
Indeksowanie inlineDane mają wbudowane indeksy dla kolumn
Zgodność z HiveNative format dla tabel Hive i silnika LLAP
Pushdowny (predicate pushdown)Możliwość filtrowania już na etapie odczytu pliku

Przykład — struktura pliku ORC:

| Magic | Header | Stripe 1 | Stripe 2 | ... | Footer | Postscript |

ORC vs Parquet vs Avro

CechaORCParquetAvro
StrukturaKolumnowaKolumnowaWierszowa
KompresjaBardzo dobra (Zlib, Snappy)Dobra (Snappy, Gzip)Dobra
Do użytku zHive, Spark, TrinoSpark, Hive, FlinkKafka, row-based usage
IndexyTakOgraniczoneBrak
PredykatyTak (dobry pushdown)TakNie

💡 Przykład zastosowania

Duży zbiór danych logów użytkowników przechowywany jest w Amazon S3 i przetwarzany przy pomocy Apache Hive w formacie ORC. Dzięki kompresji, indeksom i selektywnemu odczytowi kolumn zapytania SQL na miliardach rekordów są bardzo szybkie i tanie w realizacji — Hive nie musi ładować milionów niepotrzebnych wierszy do pamięci.

📌 Źródła

👽 Brudnopis

  • orc = optimized row columnar, ale struktura rzeczywista → kolumnowa
  • bardzo wydajny przy filtracji + zapytaniach statystycznych
  • lepszy niż Parquet w Hive, Parquet bardziej uniwersalny dla cloud
  • Stripes = bloki danych + metadane → idealne pod przetwarzanie rozproszone
  • np. Spark.read.orc(“path”) — bezpośrednie wsparcie
  • AWS Glue, Athena — bezpośrednia obsługa
  • Nie wspiera wszystkich typów danych np. nested jak Parquet