Ga naar hoofdinhoud

Delta Lake: een praktische introductie met hands-on voorbeelden

Leer de basis van Delta Lake—van installatie tot geavanceerde features zoals time travel en schema-evolutie—met PySpark-voorbeelden.
Bijgewerkt 2 okt 2026  · 9 min lezen

Verken met AI

ChatGPTClaudePerplexity

Datalakes zijn de gouden standaard voor het opslaan van enorme hoeveelheden gestructureerde en ongestructureerde data, maar hebben vaak moeite met datainconsistentie, schema-evolutie en prestatieproblemen. Delta Lake lost deze uitdagingen op door ACID-transacties, schemahandhaving en schaalbare dataverwerking boven op Apache Spark toe te voegen.

In deze tutorial leg ik de basis van Delta Lake uit, inclusief de architectuur, features en installatie, met praktische voorbeelden om je op weg te helpen.

Wat is Delta Lake?

Delta Lake is een open-source opslaglaag die is ontworpen om te integreren met Apache Spark, waardoor het een voorkeursoplossing is voor teams die het Spark-ecosysteem gebruiken. Het introduceert ACID (Atomicity, Consistency, Isolation, Durability)-transacties in big-dataomgevingen.

Door betrouwbaar metadatabeheer, versiebeheer en schemahandhaving mogelijk te maken, versterkt Delta Lake data lakehouses en zorgt het voor hoge datakwaliteit voor analytics- en machine learning-workloads.

Delta Lake-features

  • ACID-transacties: zorgen voor betrouwbare en consistente data-operaties.
  • Schemahandhaving en -evolutie: voorkomt schemamismatches en staat geleidelijke updates toe.
  • Time travel: maakt het mogelijk om eerdere versies van data te bevragen.
  • Geoptimaliseerd metadatabeheer: verbetert queryprestaties.
  • Schaalbaarheid voor batch- en streamingworkloads: ondersteunt batchverwerking en real-time streaminganalytics.

Delta Lake-architectuur

Delta Lake verbetert traditionele data-architecturen, met name de Lambda-architectuur, door batch- en streamingdataverwerking te verenigen in één, ACID-conform framework.

Dataplatformen die Delta Lake gebruiken, volgen meestal een medaillonarchitectuur, die onze data indeelt in drie logische lagen, als volgt gedefinieerd:

  • Bronze-tabellen: Inname van ruwe data uit meerdere bronnen (RDBMS, JSON-bestanden, IoT-data, enz.) die dienen als onveranderlijke bron van waarheid.
  • Silver-tabellen: Een verfijnd beeld van data via deduplicatie, transformaties en joins.
  • Gold-tabellen: Geaggregeerde inzichten op bedrijfsniveau voor dashboards, rapportages of machine learning-toepassingen.

Gold-tabellen kunnen worden geconsumeerd door business intelligence-tools, waardoor real-time analytics mogelijk wordt en besluitvorming wordt ondersteund.

The medallion architecture

De medaillonarchitectuur. Beeldbron: Databricks

Delta Lake-bestandsindeling

Delta Lake is gebouwd boven op Apache Parquet, een kolomnair bestandsformaat dat efficiënte querying, compressie en schema-evolutie mogelijk maakt. Wat Delta Lake echter onderscheidt van standaard Parquet-gebaseerde datalakes is de DeltaLog, een transactielog die een geschiedenis bijhoudt van alle wijzigingen die in een dataset zijn aangebracht.

Kernonderdelen van de Delta Lake-bestandsindeling zijn onder meer:

  • Transactielog (_delta_log/):
    • Een gestructureerde reeks JSON- en checkpointbestanden die alle wijzigingen (inserts, updates en deletes) in een Delta-tabel vastleggen.
    • Zorgt voor ACID-transacties, waardoor rollback, time travel en versiebeheer mogelijk zijn.
  • Databestanden (Parquet-formaat):
    • Delta Lake slaat data op in Parquet-bestanden, maar het transactielog volgt metadata over bestandsversies en -wijzigingen.
    • In tegenstelling tot traditionele Parquet-bestanden ondersteunen Delta-tabellen update-, delete- en merge-bewerkingen (die standaard Parquet mist).
  • Checkpoints:
    • Periodiek comprimeert Delta Lake JSON-transactielogs tot binaire checkpointbestanden, wat de queryprestaties verbetert.
    • Deze checkpoints helpen met snellere metametadata-opzoekingen en voorkomen prestatieverlies in de tijd.

Zoals je ziet, missen standaard Parquet-gebaseerde datalakes zonder de DeltaLog ACID-transacties en kunnen ze gelijktijdige wijzigingen niet veilig afhandelen. Het bestandsformaat van Delta Lake maakt het mogelijk dat streaming en batchverwerking naast elkaar bestaan met behoud van consistentie. Tot slot zorgen features zoals merge-on-read, compactie en geoptimaliseerde metadataqueries ervoor dat Delta-tabellen zeer efficiënt zijn voor grootschalige analytics.

Delta Lake instellen

Laten we aan de slag gaan met het instellen van Delta Lake! Ik deel het op in twee eenvoudige stappen:

Stap 1: Installeer Apache Spark en Delta Lake

Zorg eerst dat je een Apache Spark-omgeving hebt. Installeer vervolgens het

Delta Lake-pakket (als je Python gebruikt) met het volgende commando:

pip install pyspark delta-spark

Bovenstaand commando installeert het delta-spark-pakket, dat je Spark-sessie voorziet van de nodige Delta Lake-integraties.

Stap 2: Configureer Delta Lake met Spark

Na installatie van het pakket configureer je je Spark-sessie om Delta Lake te gebruiken met

deze instellingen:

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!")

Hier is de Spark-sessie opgezet met twee cruciale configuraties. De eerste schakelt 

Delta Lake SQL-extensies in en de tweede definieert Delta Lake als de standaard 

catalogus, zodat je Delta-formaat data correct wordt afgehandeld.

Delta Lake-basis

Laten we nu de basis doornemen. Met Delta Lake kun je ACID-conforme tabellen maken met een eenvoudige DataFrame-API.

Stap 1: Een Delta-tabel maken

Maak een Delta-tabel door een DataFrame in Delta-formaat weg te schrijven:

# 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")

De bovenstaande code maakt een basic DataFrame en schrijft dit naar een opgegeven pad in Delta-formaat. Met mode("overwrite") vervang je eventuele bestaande data.

Stap 2: Lezen uit een Delta-tabel 

Zodra een Delta-tabel is gemaakt, lees je de data als volgt:

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

A screenshot of a PySpark session displaying a Delta table.

De snippet hierboven laadt de Delta-tabel in een DataFrame en toont de inhoud met de show()-methode, als bevestiging dat de data correct is gelezen.

Stap 3: Schrijven naar een Delta-tabel (append en overwrite)

Delta Lake ondersteunt meerdere schrijfmodes, zodat je nieuwe records incrementeel kunt toevoegen (append) of bestaande data kunt vervangen (overwrite), met behoud van ACID-garanties.

Data toevoegen (append)

Voeg nieuwe data toe aan een bestaande Delta-tabel:

# 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")

De modus "append" wordt gebruikt om nieuwe rijen toe te voegen aan de tabel zonder de bestaande data te beïnvloeden.

Data overschrijven (overwrite)

Overschrijf de hele Delta-tabel met bijgewerkte data:

# 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")

Met de "overwrite"-modus vervang je de inhoud van de Delta-tabel volledig door de nieuwe, bijgewerkte DataFrame.

Geavanceerde features van Delta Lake

In dit gedeelte behandelen we enkele krachtige functionaliteiten van Delta Lake, naast de basisbewerkingen. 

We verkennen met name hoe je terug kunt kijken naar eerdere dataversies, automatisch schemawijzigingen beheert en meerdere bewerkingen atomair kunt uitvoeren.

Time travel (oudere dataversies bevragen)

Met de time travel-functie van Delta Lake kun je eerdere versies van je tabel benaderen. Elke schrijfbewerking op een Delta-tabel creëert een nieuwe versie, zodat je een eerdere staat van je data kunt bevragen. Ik heb deze feature gebruikt om datawijzigingen te auditen, problemen te debuggen of een vorige snapshot te herstellen als er iets misgaat.

# 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()

Querying an earlier version of a Delta table

Schema-evolutie en -handhaving

Naarmate datasets evolueren, kunnen er nieuwe kolommen bijkomen. Delta Lake kan het schema automatisch laten meegroeien door nieuwe velden in een bestaande tabel te mergen, terwijl de data consistent blijft. Dit betekent dat je je tabel niet hoeft te recreëren of handmatig aan te passen wanneer je datastructuur verandert.

Laten we data toevoegen met een bijgewerkt schema via automatische schema-evolutie:

# 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")

Appending data with an updated schema using automatic schema evolution

Hier bevat het DataFrame new_df een extra kolom, country. Door option("mergeSchema", "true") te gebruiken, werkt de Delta Lake-engine automatisch het schemas van de tabel bij om de nieuwe kolom op te nemen, terwijl de data veilig wordt toegevoegd!

Delta Lake-transacties (ACID)

ACID-transacties in Delta Lake garanderen dat complexe operaties betrouwbaar worden uitgevoerd — zelfs bij hoge gelijktijdigheid. Dit betekent dat een reeks bewerkingen (zoals updates en inserts) als één geheel wordt behandeld. Als een deel van de transactie faalt, wordt er niets toegepast, zodat je data consistent blijft.

Laten we een atomaire transactie uitvoeren met een MERGE-operatie:

-- 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)

Output of MERGE statement

In het bovenstaande voorbeeld zoekt de MERGE-instructie naar rijen in de doeltabel waar de naam overeenkomt en het veld country NULL is. Als er een match is, wordt de rij bijgewerkt; anders wordt er een nieuw record ingevoegd. 

Let op dat, ook al staat er mogelijk al een rij voor „Alice” in de tabel, de voorwaarde target.country IS NULL ertoe kan leiden dat de operatie een nieuwe rij invoegt in plaats van een rij met een niet-lege country bij te werken. Dit voorbeeld laat zien hoe belangrijk het is om de matchcriteria in transactionele operaties zorgvuldig te definiëren.

Best practices voor het gebruik van Delta Lake

Dit zijn de best practices die ik volg wanneer ik met Delta Lake werk. Ze helpen je efficiënte, onderhoudbare datapijplijnen te bouwen.

Efficiënte datapartitionering

Het partitioneren van je Delta-tabellen kan de queryprestaties aanzienlijk verbeteren bij grote datasets.  

Tip: Gebruik bij het schrijven van je DataFrame de optie .partitionBy("column_name") om je data op te delen in kleinere, beter hanteerbare stukken (bijvoorbeeld op datum of categorie). Deze aanpak vermindert de hoeveelheid data die tijdens typische queries wordt gescand.

Metadata beheren met Delta Lake

Delta Lake gebruikt een transactielog (de _delta_log) om metadata bij te houden voor alle bewerkingen op je tabel. 

Tip: Plan periodieke onderhoudsbewerkingen (zoals het VACUUM-commando) om verouderde databestanden te verwijderen en de metadata te stroomlijnen. Dit resulteert in snellere queryprestaties en eenvoudiger beheer van grote datasets.

Prestaties optimaliseren met Z-ordering

Z-ordering is een dataclusteringstechniek die data op schijf organiseert om de query-efficiëntie te verbeteren, vooral bij filteren op specifieke kolommen:

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

Met het bovenstaande SQL-commando instrueer je Delta Lake om de data fysiek te herstructureren op basis van de kolommen name en age. Door vergelijkbare waarden te groeperen, hoeven queries die op deze kolommen filteren minder data te scannen en draaien ze sneller.

Probleemoplossing en debuggen in Delta Lake

Tijdens het werken met Delta Lake kun je af en toe tegen obstakels aanlopen. De kunst is om deze uitdagingen te zien als kansen om je begrip te verdiepen en de technologie te beheersen. Hier zijn enkele van mijn praktische inzichten en tips om je weer op weg te helpen.

Veelvoorkomende fouten en oplossingen

Je kunt problemen tegenkomen zoals schema-mismatches of partitie-afstemmingsproblemen. Als je binnenkomende data bijvoorbeeld niet overeenkomt met het tabelschema, kun je fouten zien tijdens schrijfbewerkingen. Overweeg opties zoals mergeSchema te gebruiken zodat Delta Lake zich kan aanpassen. 

Controleer ook bij prestatieverlies of je data optimaal is gepartitioneerd of dat een onderhoudscommando zoals VACUUM kan helpen om verouderde bestanden te verwijderen.

Delta-tabelbewerkingen debuggen 

Als dingen niet werken zoals verwacht, geen zorgen—het hoort erbij! Een goede eerste stap is het inspecteren van het transactielog (te vinden in de map _delta_log). Dit log biedt een gedetailleerde geschiedenis van transacties en helpt je te achterhalen wanneer en waar het misging. 

Als je bovendien inconsistenties of onverwachte wijzigingen opmerkt, probeer dan time travel te gebruiken om verschillende tabelversies te vergelijken. Deze aanpak helpt je het probleem te isoleren en de gebeurtenissen te begrijpen die tot de fout hebben geleid.

Conclusie

Delta Lake biedt tal van voordelen—van robuuste ACID-transacties en efficiënt metadatabeheer tot features zoals time travel en schema-evolutie—die je in staat stellen veerkrachtige en schaalbare datapijplijnen te bouwen. De integratie met Apache Spark betekent dat Delta Lake de perfecte aanvulling kan zijn om je workflows te stroomlijnen als je al in het Spark-ecosysteem werkt.

Voor wie zijn kennis verder wil verdiepen, raad ik aan om meer bronnen op DataCamp te verkennen:

  1. Databricks Concepts-cursus – Leer de kernprincipes achter Databricks en Delta Lake, inclusief hoe ze dataverwerking en analytics-workflows verbeteren.
  2. Big Data Fundamentals with PySpark-cursus – Krijg hands-on ervaring met Apache Spark en PySpark, en beheers technieken om grootschalige datasets efficiënt te verwerken.
  3. Introduction to Data Engineering-cursus – Begrijp de fundamentele concepten van data engineering en bouw een solide basis voor het beheren van big data.
  4. Understanding Modern Data Architecture-cursus – Ontdek actuele best practices en trends in moderne data-architectuur, zodat je voorop blijft in het dynamische datalandschap van vandaag.

Veel leerplezier en succes met je datareis!

FAQs

Wat is Delta Lake en hoe verschilt het van traditionele datalakes?

Delta Lake is een open-source opslaglaag die ACID-transacties, schemahandhaving en -evolutie, en time travel-mogelijkheden toevoegt aan Apache Spark. Dit maakt databeheer betrouwbaarder en biedt features die traditionele datalakes missen.

Hoe kan ik Delta Lake instellen in mijn Apache Spark-omgeving?

Om Delta Lake in te stellen, installeer je Apache Spark en het delta-spark-pakket (met een commando zoals pip install pyspark delta-spark). Configureer vervolgens je Spark-sessie met Delta Lake-specifieke instellingen die SQL-extensies inschakelen en Delta als standaardcatalogus aanwijzen.

Wat zijn de belangrijkste features die Delta Lake waardevol maken?

Belangrijke features zijn onder meer ACID-transacties voor robuuste data-operaties, time travel om historische data te bevragen, automatische schema-evolutie om veranderingen in datastructuur aan te kunnen, en geoptimaliseerd metadatabeheer voor snellere queryprestaties.

Welke stappen moet ik nemen als ik fouten tegenkom tijdens het werken met Delta Lake?

Veelvoorkomende problemen zoals schema-mismatches of partitieproblemen kun je aanpakken met opties zoals mergeSchema of door je datapartities te optimaliseren. Daarnaast kunnen het inspecteren van de _delta_log en time travel-queries helpen om fouten te lokaliseren en op te lossen.

Welke best practices moet ik volgen bij het gebruik van Delta Lake in mijn datapijplijnen?

Het is aan te raden om je data efficiënt te partitioneren, periodieke onderhoudstaken zoals VACUUM in te plannen om verouderde bestanden te beheren, en technieken zoals Z-ordering te gebruiken om queryprestaties te optimaliseren—allemaal behandeld in de best practices-sectie van het artikel.


Khalid Abdelaty's photo
Author
Khalid Abdelaty
LinkedIn

Ik ben een data-engineer en communitybouwer die werkt aan datapijplijnen, cloud en AI-tools, en tegelijkertijd praktische, impactvolle tutorials schrijft voor DataCamp en beginnende developers.

Onderwerpen
Data-engineering
Databricks

Leer meer over data engineering met deze cursussen!

Leerpad

Data-engineer in Python

40 uur
Leer de vaardigheden die je nodig hebt om data efficiënt te verzamelen, op te schonen en te beheren, en om pijplijnen te plannen en te monitoren, zodat je je kunt onderscheiden op het gebied van data-engineering.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken