🎯 Definicja
Apache Iceberg to otwarty format tabel dla ogromnych zbiorów analitycznych. Został zaprojektowany przez Netflix, aby naprawić problemy ze skalowalnością i poprawnością danych w Apache Hive (np. brakujące pliki, brak atomowości).
🔑 Kluczowe punkty
- Ukryte Partycjonowanie (Hidden Partitioning): Użytkownik nie musi wiedzieć, że dane są fizycznie podzielone na “rok=2024/miesiac=01”. Po prostu pyta o datę, a Iceberg sam wie, które pliki czytać.
- Snapshot Isolation: Czytelnicy nigdy nie widzą “częściowo zapisanych” danych. Widzą spójny stan z momentu rozpoczęcia zapytania.
- Schema Evolution: Możesz zmienić nazwę kolumny lub jej typ, i nic się nie zepsuje.
📚 Szczegółowe wyjaśnienie
Iceberg zyskuje ogromną popularność jako “wygrany” standard dla nowoczesnego Data Lakehouse. Jest wspierany przez wszystkich gigantów (AWS, Snowflake, Google BigQuery, Databricks). W przeciwieństwie do Hudi (skupionego na streamingu) czy Delta Lake (początkowo zamkniętego przez Databricks), Iceberg jest postrzegany jako najbardziej “neutralny” i najlepiej zaprojektowany architektonicznie format. Nie przechowuje listy plików w folderach (co jest wolne na S3), ale w specjalnych plikach metadanych (Manifest files), co pozwala na błyskawiczne operacje nawet na tabelach z milionami plików.
💡 Przykład zastosowania
Globalna platforma streamingowa (jak Netflix) trzyma dane o oglądalności w Icebergu.
Gdy inżynier musi usunąć dane użytkownika (RODO/GDPR), wykonuje proste DELETE FROM logs WHERE user_id = 'XYZ'. Iceberg przepisuje tylko te nieliczne pliki, w których ten użytkownik występuje, tworząc nowy “Snapshot” tabeli.
📌 Źródła
👽 Brudnopis
- Time Travel:
SELECT * FROM table TIMESTAMP AS OF '2024-01-01'. - Maintenance: Expire Snapshots, Compaction.
- Neutralność silnika: działa tak samo dobrze w Sparku, Trino, Flinku.