Lewati ke konten utama

Delta Lake: Pengantar Praktis dengan Contoh Hands-on

Pelajari dasar-dasar Delta Lake, dari penyiapan hingga fitur lanjutan seperti time travel dan evolusi skema, dengan contoh PySpark.
Diperbarui 28 Sep 2026  · 9 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Data lake adalah standar emas untuk menyimpan sejumlah besar data terstruktur dan tidak terstruktur, namun sering menghadapi inkonsistensi data, evolusi skema, dan masalah kinerja. Delta Lake mengatasi tantangan ini dengan menambahkan transaksi ACID, penegakan skema, dan pemrosesan data yang dapat diskalakan di atas Apache Spark.

Dalam tutorial ini, saya akan menjelaskan dasar-dasar Delta Lake, termasuk arsitektur, fitur, dan penyiapannya, beserta contoh praktis untuk membantu Anda memulai.

Apa itu Delta Lake?

Delta Lake adalah proyek lapisan penyimpanan open-source yang dirancang untuk terintegrasi dengan Apache Spark, sehingga menjadi solusi pilihan bagi tim yang menggunakan ekosistem Spark. Delta Lake menghadirkan transaksi ACID (Atomicity, Consistency, Isolation, Durability) ke lingkungan big data.

Dengan mengaktifkan manajemen metadata yang tangguh, version control, dan penegakan skema, Delta Lake meningkatkan lakehouse data dan memastikan kualitas data yang tinggi untuk beban kerja analitik dan machine learning.

Fitur Delta Lake

  • Transaksi ACID: Memastikan operasi data yang andal dan konsisten.
  • Penegakan dan evolusi skema: Mencegah ketidaksesuaian skema sambil memungkinkan pembaruan bertahap.
  • Time travel: Memungkinkan kueri terhadap versi data sebelumnya.
  • Manajemen metadata yang dioptimalkan: Meningkatkan kinerja kueri.
  • Skalabilitas untuk beban kerja batch dan streaming: Mendukung pemrosesan batch dan analitik streaming real-time.

Arsitektur Delta Lake

Delta Lake menyempurnakan arsitektur data tradisional, khususnya arsitektur Lambda, dengan menyatukan pemrosesan data batch dan streaming dalam satu kerangka kerja yang sesuai ACID.

Platform data yang menggunakan Delta Lake biasanya mengikuti arsitektur medali, yang mengorganisasi data ke dalam tiga lapisan logis yang didefinisikan sebagai berikut:

  • Tabel Bronze: Pemasukan data mentah dari berbagai sumber (RDBMS, file JSON, data IoT, dll.) yang menjadi sumber kebenaran yang tidak dapat diubah.
  • Tabel Silver: Tampilan data yang disaring melalui deduplikasi, transformasi, dan join.
  • Tabel Gold: Insight tingkat bisnis yang teragregasi untuk dashboard, pelaporan, atau aplikasi machine learning.

Tabel Gold dapat dikonsumsi oleh alat business intelligence, memungkinkan analitik real-time dan mendukung pengambilan keputusan.

Arsitektur medali

Arsitektur medali. Sumber gambar: Databricks

Format Berkas Delta Lake

Delta Lake dibangun di atas Apache Parquet, format penyimpanan kolomnar yang memungkinkan kueri efisien, kompresi, dan evolusi skema. Namun, yang membedakan Delta Lake dari data lake berbasis Parquet standar adalah DeltaLog, sebuah log transaksi yang menyimpan riwayat semua perubahan yang dilakukan pada suatu dataset.

Komponen inti dari format berkas Delta Lake mencakup:

  • Log transaksi (_delta_log/):
    • Urutan terstruktur dari berkas JSON dan checkpoint yang merekam semua perubahan (insert, update, dan delete) dalam tabel Delta.
    • Memastikan transaksi ACID, memungkinkan rollback, time travel, dan version control.
  • Berkas data (format Parquet):
    • Delta Lake menyimpan data dalam berkas Parquet, tetapi log transaksi melacak metadata tentang versi berkas dan perubahan.
    • Berbeda dari berkas Parquet tradisional, tabel Delta mendukung operasi update, delete, dan merge (yang tidak dimiliki Parquet standar).
  • Checkpoint:
    • Secara berkala, Delta Lake memadatkan log transaksi JSON menjadi berkas checkpoint biner, meningkatkan kinerja kueri.
    • Checkpoint ini membantu mempercepat pencarian metadata dan mencegah degradasi kinerja seiring waktu.

Seperti yang terlihat, tanpa DeltaLog, data lake berbasis Parquet standar tidak memiliki transaksi ACID dan tidak dapat menangani modifikasi bersamaan secara aman. Format berkas Delta Lake memungkinkan pemrosesan streaming dan batch hidup berdampingan sambil menjaga konsistensi. Terakhir, fitur seperti merge-on-read, pemadatan, dan kueri metadata yang dioptimalkan membuat tabel Delta sangat efisien untuk analitik skala besar.

Menyiapkan Delta Lake

Mari menyelami penyiapan Delta Lake! Saya akan membaginya menjadi dua langkah sederhana:

Langkah 1: Instal Apache Spark dan Delta Lake

Untuk memulai, pastikan Anda memiliki lingkungan Apache Spark. Lalu instal

paket Delta Lake (jika menggunakan Python) dengan perintah berikut:

pip install pyspark delta-spark

Perintah di atas menginstal paket delta-spark, yang membekali sesi Spark Anda dengan integrasi Delta Lake yang diperlukan.

Langkah 2: Konfigurasikan Delta Lake dengan Spark

Setelah memasang paket, konfigurasikan sesi Spark Anda untuk menggunakan Delta Lake dengan

pengaturan berikut:

from pyspark.sql import SparkSession

# Initialize a SparkSession with Delta support
spark = SparkSession.builder \
    .appName("DeltaLakePractice") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .getOrCreate()

# Check if Spark is working
print("Spark Session Created Successfully!")

Di sini, sesi Spark disiapkan dengan dua konfigurasi penting. Yang pertama mengaktifkan 

ekstensi SQL Delta Lake dan yang kedua menetapkan Delta Lake sebagai 

katalog default, memastikan data berformat Delta ditangani dengan benar.

Dasar-dasar Delta Lake

Sekarang, mari masuk ke dasar-dasarnya. Delta Lake memungkinkan Anda membuat tabel yang sesuai ACID menggunakan API DataFrame sederhana.

Langkah 1: Membuat tabel Delta

Buat tabel Delta dengan menulis DataFrame dalam format Delta:

# Sample DataFrame creation
data = [("Alice", 34), ("Bob", 45), ("Cathy", 29)]
columns = ["name", "age"]
df = spark.createDataFrame(data, columns)

# Save the DataFrame as a Delta table (overwrite mode replaces any existing data)
df.write.format("delta").mode("overwrite").save("/path/to/delta/table")

Cuplikan kode di atas membuat DataFrame dasar dan menulisnya ke path yang ditentukan menggunakan format Delta. Penggunaan mode("overwrite") memastikan data yang ada akan diganti.

Langkah 2: Membaca dari tabel Delta 

Setelah tabel Delta dibuat, baca datanya sebagai berikut:

# Load the Delta table from a specified path
delta_df = spark.read.format("delta").load("/path/to/delta/table")
delta_df.show()

Tangkapan layar sesi PySpark yang menampilkan tabel Delta.

Cuplikan di atas memuat tabel Delta ke dalam DataFrame dan menampilkan isinya dengan metode show(), mengonfirmasi bahwa data telah dibaca dengan benar.

Langkah 3: Menulis ke tabel Delta (append dan overwrite)

Delta Lake mendukung beberapa mode penulisan, memungkinkan Anda menambahkan catatan baru secara inkremental (append) atau mengganti data yang ada (overwrite) sambil mempertahankan jaminan ACID.

Menambahkan data (append)

Tambahkan data baru ke tabel Delta yang sudah ada:

# New data to append
new_data = [("David", 40)]
new_df = spark.createDataFrame(new_data, columns)

# Append data to the existing Delta table
new_df.write.format("delta").mode("append").save("/path/to/delta/table")

Mode "append" digunakan untuk menambahkan baris baru ke tabel tanpa memengaruhi data yang ada.

Menimpa data (overwrite)

Timpa seluruh tabel Delta dengan data yang diperbarui:

# Updated data for overwrite
updated_data = [("Alice", 35), ("Bob", 46), ("Cathy", 30)]
updated_df = spark.createDataFrame(updated_data, columns)

# Overwrite the current contents of the Delta table
updated_df.write.format("delta").mode("overwrite").save("/path/to/delta/table")

Menggunakan mode "overwrite" mengganti seluruh konten tabel Delta dengan DataFrame yang diperbarui.

Fitur Lanjutan Delta Lake

Bagian ini membahas beberapa fungsionalitas kuat Delta Lake di luar operasi dasar. 

Khususnya, kita akan mengeksplorasi bagaimana Anda dapat menelusuri versi data sebelumnya, otomatis mengelola perubahan skema, dan melakukan transaksi multioperasi secara atomik.

Time travel (mengkueri versi data yang lebih lama)

Fitur time travel Delta Lake memungkinkan Anda mengakses versi tabel sebelumnya. Setiap operasi tulis pada tabel Delta membuat versi baru sehingga Anda dapat mengkueri keadaan data yang lebih awal. Saya menggunakan fitur ini untuk mengaudit perubahan data, men-debug masalah, atau memulihkan snapshot sebelumnya jika terjadi kesalahan.

# Querying an earlier version (version 0) of the Delta table:
historical_df = spark.read.format("delta") \
    .option("versionAsOf", 0) \
    .load("/path/to/delta/table")
historical_df.show()

Mengkueri versi lebih awal dari tabel Delta

Evolusi dan penegakan skema

Seiring berkembangnya dataset, kolom baru mungkin ditambahkan. Delta Lake dapat secara otomatis mengembangkan skema, menggabungkan field baru ke dalam tabel yang ada sambil menegakkan konsistensi data. Ini berarti Anda tidak perlu membuat ulang atau menyesuaikan tabel secara manual setiap kali struktur data berubah.

Mari menambahkan data dengan skema yang diperbarui menggunakan evolusi skema otomatis:

# Create a DataFrame with an additional "country" column:
new_data = [("Alice", 34, "USA"), ("Bob", 45, "Canada")]
columns = ["name", "age", "country"]
new_df = spark.createDataFrame(new_data, columns)

# Append the new data to the Delta table with schema evolution enabled:
new_df.write.format("delta") \
    .mode("append") \
    .option("mergeSchema", "true") \
    .save("/path/to/delta/table")

Menambahkan data dengan skema yang diperbarui menggunakan evolusi skema otomatis

Di sini, DataFrame new_df berisi kolom tambahan, country. Dengan menggunakan option("mergeSchema", "true"), mesin Delta Lake secara otomatis memperbarui skema tabel untuk mengakomodasi kolom baru sambil menambahkan data dengan aman!

Transaksi Delta Lake (ACID)

Transaksi ACID Delta Lake menjamin bahwa operasi kompleks dieksekusi secara andal—bahkan di bawah konkurensi tinggi. Artinya, rangkaian operasi (seperti update dan insert) diperlakukan sebagai satu kesatuan. Jika ada bagian transaksi yang gagal, tidak ada perubahan yang diterapkan, memastikan data Anda tetap konsisten.

Mari melakukan transaksi atomik dengan operasi MERGE:

-- Execute a MERGE statement in SQL to update or insert data atomically:
MERGE INTO delta./path/to/delta/table AS target
USING (SELECT 'Alice' AS name, 35 AS age, 'USA' AS country) AS source
ON target.name = source.name AND target.country IS NULL
WHEN MATCHED THEN 
   UPDATE SET target.age = source.age, target.country = source.country
WHEN NOT MATCHED THEN 
   INSERT (name, age, country) VALUES (source.name, source.age, source.country)

Keluaran pernyataan MERGE

Pada contoh di atas, pernyataan MERGE mencari baris dalam tabel target yang namanya cocok dan field country bernilai NULL. Jika cocok, baris diperbarui; jika tidak, sebuah catatan baru disisipkan. 

Perhatikan bahwa meskipun mungkin sudah ada baris untuk “Alice” dalam tabel, kondisi target.country IS NULL dapat menyebabkan operasi menyisipkan baris baru alih-alih memperbarui baris dengan nilai country yang tidak null. Contoh ini menunjukkan pentingnya mendefinisikan kriteria pencocokan dengan cermat dalam operasi transaksional.

Praktik Terbaik Menggunakan Delta Lake

Berikut praktik terbaik yang saya ikuti saat bekerja dengan Delta Lake. Ini dapat membantu Anda membangun pipeline data yang efisien dan mudah dirawat.

Partisi data yang efisien

Mempartisi tabel Delta Anda dapat secara signifikan meningkatkan kinerja kueri saat menangani dataset besar.  

Tips: Saat menulis DataFrame Anda, gunakan opsi .partitionBy("column_name") untuk memecah data menjadi potongan yang lebih kecil dan mudah dikelola (misalnya, berdasarkan tanggal atau kategori). Pendekatan ini mengurangi jumlah data yang dipindai selama kueri tipikal.

Mengelola metadata dengan Delta Lake

Delta Lake menggunakan log transaksi (_delta_log) untuk memelihara metadata atas semua operasi pada tabel Anda. 

Tips: Jadwalkan operasi pemeliharaan berkala (seperti perintah VACUUM) untuk menghapus berkas data usang dan merapikan metadata. Ini menghasilkan kinerja kueri yang lebih cepat dan manajemen dataset besar yang lebih mudah.

Mengoptimalkan kinerja dengan Z-ordering

Z-ordering adalah teknik pengelompokan data yang mengatur data di disk untuk meningkatkan efisiensi kueri, terutama saat melakukan filter pada kolom tertentu:

OPTIMIZE delta./path/to/delta/table
ZORDER BY (name, age);

Perintah SQL di atas memberi tahu Delta Lake untuk mengatur ulang data secara fisik berdasarkan kolom name dan age. Dengan menempatkan nilai yang serupa berdekatan, kueri yang memfilter pada kolom tersebut memindai lebih sedikit data dan berjalan lebih cepat.

Pemecahan Masalah dan Debugging Delta Lake

Saat bekerja dengan Delta Lake, sesekali Anda mungkin menemui hambatan. Kunci utamanya adalah menganggap tantangan ini sebagai peluang untuk memperdalam pemahaman dan menguasai teknologinya. Berikut beberapa wawasan dan tips praktis saya untuk membantu Anda kembali ke jalur yang benar.

Kesalahan umum dan solusinya

Anda mungkin menemui masalah seperti ketidaksesuaian skema atau masalah penyelarasan partisi. Misalnya, jika data masuk tidak cocok dengan skema tabel, Anda mungkin melihat kesalahan saat operasi tulis. Pertimbangkan untuk menggunakan opsi seperti mergeSchema agar Delta Lake dapat menyesuaikan. 

Selain itu, jika kinerja kueri menurun, periksa apakah data Anda dipartisi secara optimal atau apakah perintah pemeliharaan seperti VACUUM dapat membantu menghapus berkas usang.

Debugging operasi tabel Delta 

Ketika sesuatu tidak berjalan seperti yang diharapkan, jangan khawatir—itu bagian dari proses! Langkah awal yang bagus adalah memeriksa log transaksi (terletak di direktori _delta_log). Log ini menawarkan riwayat transaksi yang terperinci dan dapat membantu Anda menemukan kapan dan di mana masalah terjadi. 

Selain itu, jika Anda melihat inkonsistensi atau perubahan tak terduga, cobalah menggunakan time travel untuk membandingkan berbagai versi tabel. Pendekatan ini akan membantu Anda mengisolasi masalah dan memahami kejadian sebelum kesalahan muncul.

Kesimpulan

Delta Lake menghadirkan banyak keunggulan—mulai dari transaksi ACID yang tangguh dan manajemen metadata yang efisien hingga fitur seperti time travel dan evolusi skema—yang memberdayakan Anda membangun pipeline data yang tangguh dan skalabel. Integrasinya dengan Apache Spark berarti Delta Lake bisa menjadi tambahan yang tepat untuk merampingkan alur kerja Anda jika Anda sudah berinvestasi dalam ekosistem Spark.

Bagi yang ingin memperdalam pemahaman, saya mendorong Anda untuk menelusuri sumber daya lebih lanjut di DataCamp:

  1. Kursus Databricks Concepts – Pelajari prinsip inti di balik Databricks dan Delta Lake, termasuk bagaimana keduanya meningkatkan pemrosesan data dan alur kerja analitik.
  2. Kursus Big Data Fundamentals with PySpark – Dapatkan pengalaman praktis dengan Apache Spark dan PySpark, menguasai teknik untuk memproses dataset skala besar secara efisien.
  3. Kursus Introduction to Data Engineering – Pahami konsep dasar rekayasa data dan bangun fondasi yang kuat untuk mengelola big data.
  4. Kursus Understanding Modern Data Architecture – Jelajahi praktik terbaik dan tren terkini dalam arsitektur data modern, membantu Anda tetap unggul di lanskap data yang dinamis saat ini.

Selamat belajar, dan semoga sukses dalam perjalanan data Anda!

FAQs

Apa itu Delta Lake dan bagaimana bedanya dengan data lake tradisional?

Delta Lake adalah lapisan penyimpanan open-source yang menambahkan transaksi ACID, penegakan dan evolusi skema, serta kemampuan time travel ke Apache Spark. Ini membuat pengelolaan data lebih andal dan menghadirkan fitur yang tidak dimiliki data lake tradisional.

Bagaimana cara menyiapkan Delta Lake di lingkungan Apache Spark saya?

Untuk menyiapkan Delta Lake, instal Apache Spark dan paket delta-spark (menggunakan perintah seperti pip install pyspark delta-spark). Lalu, konfigurasikan sesi Spark Anda dengan pengaturan khusus Delta Lake yang mengaktifkan ekstensi SQL dan menetapkan Delta sebagai katalog default.

Fitur utama apa yang membuat Delta Lake menjadi alat yang berharga?

Fitur penting mencakup transaksi ACID untuk operasi data yang tangguh, time travel untuk mengkueri data historis, evolusi skema otomatis untuk menangani perubahan struktur data, dan manajemen metadata yang dioptimalkan untuk kinerja kueri yang lebih cepat.

Langkah apa yang harus saya ambil jika menemui kesalahan saat bekerja dengan Delta Lake?

Masalah umum seperti ketidaksesuaian skema atau permasalahan partisi dapat diatasi dengan menggunakan opsi seperti mergeSchema atau dengan mengoptimalkan partisi data Anda. Selain itu, memeriksa _delta_log dan menggunakan kueri time travel dapat membantu menemukan dan menyelesaikan kesalahan.

Praktik terbaik apa yang harus saya ikuti saat menggunakan Delta Lake dalam pipeline data saya?

Disarankan untuk mempartisi data Anda secara efisien, menjadwalkan tugas pemeliharaan berkala seperti VACUUM untuk mengelola berkas usang, dan memanfaatkan teknik seperti Z-ordering untuk mengoptimalkan kinerja kueri—semuanya dibahas di bagian praktik terbaik artikel ini.


Khalid Abdelaty's photo
Author
Khalid Abdelaty
LinkedIn

Saya seorang data engineer dan pembangun komunitas yang bekerja lintas pipeline data, cloud, dan perkakas AI sambil menulis tutorial praktis dan berdampak tinggi untuk DataCamp dan pengembang yang sedang berkembang.

Topik
Rekayasa Data
Databricks

Pelajari lebih lanjut tentang data engineering dengan kursus-kursus ini!

Program

Data Engineer dalam Python

40 jam
Dapatkan keterampilan yang sangat dicari untuk mengelola data dengan efisien, termasuk mengimpor, membersihkan, mengelola data, serta menjadwalkan dan memantau pipeline, sehingga Anda dapat menonjol di bidang data engineering.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya