Tutorial Apache Iceberg: Open Table Format untuk Data Lakehouse

# Apache Iceberg: Format Tabel Lintas-Engine untuk Lakehouse Apache Iceberg adalah format tabel terbuka yang mengubah sekumpulan file Parquet (atau ORC/Avro) di object storage menjadi tabel sungguhan...

By Ruby Abdullah · · tutorial
Apache IcebergLakehouseTable FormatData EngineeringPyIcebergSpark

Apache Iceberg: Format Tabel Lintas-Engine untuk Lakehouse

Apache Iceberg adalah format tabel terbuka yang mengubah sekumpulan file Parquet (atau ORC/Avro) di object storage menjadi tabel sungguhan dengan snapshot, evolusi skema, dan penulisan konkuren yang aman. Yang membedakannya dari format lakehouse lain adalah desain yang berpusat pada katalog serta hidden partitioning: tabel didefinisikan oleh penunjuk katalog ke sebuah pohon metadata, dan partisi merupakan properti tabel, bukan sesuatu yang harus disebutkan setiap kueri. Tutorial ini membahas Iceberg dari dasar dengan PyIceberg sebagai jalur utama praktik, lalu menunjukkan tabel yang sama dari Spark SQL serta catatan bagaimana DuckDB dan Trino membacanya.

Apa Itu Iceberg dan Mengapa Format Tabel Penting

Data lake biasa hanyalah file di dalam bucket. Parquet memberi penyimpanan kolumnar yang efisien, tetapi sebuah folder berisi file Parquet bukanlah tabel: tidak ada commit atomik, tidak ada skema yang disepakati, tidak ada cara mengetahui file mana yang aktif, dan tidak ada cara aman bagi dua job untuk menulis bersamaan. Pembaca yang memindai direktori saat penulis sedang bekerja bisa mengambil data yang setengah jadi.

Sebuah format tabel menyelesaikan ini dengan menambahkan lapisan metadata di atas file data. Metadata itu menjawab tiga pertanyaan secara presisi:

  • File mana saja yang membentuk tabel saat ini (dan pada titik waktu mana pun di masa lalu)?
  • Apa skemanya, dan bagaimana skema itu berubah?
  • Bagaimana tata letak data agar kueri bisa melewati file yang tidak diperlukan?

Jawaban Iceberg adalah pohon file metadata yang bersifat immutable ditambah sebuah katalog yang menyimpan satu penunjuk ke puncak pohon tersebut. Menukar penunjuk itu secara atomik adalah inti dari sebuah commit. Karena setiap file metadata immutable, pembaca selalu melihat snapshot yang konsisten dan tidak pernah menjumpai tulisan yang separuh jadi.

Bagaimana Iceberg Berbeda dari Delta Lake dan Hudi

Ketiganya adalah format tabel terbuka di atas file kolumnar, tetapi pilihan desainnya berbeda:

  • Iceberg melacak status melalui penunjuk katalog dan pohon file metadata/manifest. Partisi bersifat hidden — dideklarasikan pada tabel dan diterapkan otomatis — dan Iceberg secara eksplisit lintas-engine, dengan spesifikasi stabil yang diimplementasikan oleh Spark, Flink, Trino, DuckDB, Snowflake, dan PyIceberg murni-Python.
  • Delta Lake melacak status melalui log transaksi JSON terurut (deltalog) yang menyatu dengan data. Partisi mengikuti tata letak direktori fisik, dan ekosistemnya secara historis berpusat di Spark (meski delta-rs memperluasnya).
  • Hudi berfokus pada upsert cepat dan aliran inkremental, dengan timeline commit serta model record-key/primary-key yang kuat. Cocok untuk beban kerja CDC yang berat.

Intinya secara praktis: pilih Iceberg ketika Anda ingin banyak engine membaca dan menulis tabel yang sama melalui katalog bersama, dan ketika Anda ingin perubahan partisi serta skema menjadi operasi metadata, bukan penulisan ulang data.

Arsitektur Iceberg

Tabel Iceberg adalah pohon berlapis. Dari atas ke bawah:

Catalog                          (menunjuk ke metadata file aktif per tabel)

└─ metadata.json (skema tabel, partition spec, daftar snapshot, id snapshot aktif)

└─ manifest list (satu file Avro per snapshot; mendaftar manifest dalam snapshot itu)

└─ manifest files (Avro; tiap file mendaftar data file + statistik & nilai partisi)

└─ data files (Parquet / ORC / Avro yang menampung baris sebenarnya)

Dibaca dari atas ke bawah:

Artikel Terkait

Tutorial Delta Lake: Lakehouse Andal dengan Transaksi ACID

Delta Lake: Penyimpanan Lakehouse yang Andal dengan Transaksi ACID Data lake yang dibangun di atas object storage memang...

Tutorial dlt: Pipeline Ingestion Data Berbasis Python

Membangun Pipeline EL Berbasis Python dengan dlt (data load tool) Sebagian besar tim data menghabiskan waktu yang tidak ...

Tutorial Pandera: Validasi Data Statistik untuk DataFrame

Pandera: Validasi Data Statistik untuk DataFrame pandas dan Polars Pipeline data sering gagal tanpa suara. Sebuah kolom ...

Tutorial Dagster: Orkestrasi Data dengan Software-Defined Assets

Dagster: Orkestrasi Data Modern dengan Software-Defined Assets Dagster adalah orkestrator data yang menyusun pipeline be...