AccueilBlogTest technique Delta Lake vs Apache Iceberg : le choix du table format
Guide recrutement data

Test technique Delta Lake vs Apache Iceberg : le choix du table format

Delta Lake, Iceberg et Hudi sont les trois table formats open source qui apportent ACID au data lake. En 2025, ce choix architectural est systematiquement evalue en entretien Data Engineer Senior.

Data Builder·Juin 2025·7 min de lecture·Data Engineer
Sommaire
  1. Problemes du Parquet pur
  2. Delta Lake
  3. Apache Iceberg
  4. Apache Hudi
  5. Comparaison des trois
  6. Comment choisir
  7. Grille

1Les limites du Parquet sans table format

Question discriminante

Pourquoi Parquet seul ne suffit pas pour un data lake de production ?

  • Pas d ACID — deux jobs qui ecrivent en meme temps peuvent corrompre les donnees
  • Pas de rollback — si un job echoue a mi-parcours, les donnees sont dans un etat incoherent
  • Schema evolution fragile — ajouter une colonne peut casser les readers existants
  • Pas de upsert natif — mettre a jour une ligne dans Parquet = réécrire toute la partition
  • Pas de time travel — impossible de requeter les donnees d hier sans les avoir sauvegardees separement

2Delta Lake : le standard Databricks/Microsoft

Question discriminante

Quels sont les 3 composants principaux de Delta Lake ?

  • Transaction Log — fichier _delta_log/ qui trace toutes les operations (commits). Source de verite pour ACID et time travel
  • OPTIMIZE + ZORDER — compacter les petits fichiers et co-localiser les donnees frequemment requetees ensemble
  • Auto Optimize — compaction automatique dans Databricks. Elimine les petits fichiers crees par le streaming
  • Ecosystem — natif Databricks, supporte par Spark, PySpark. De plus en plus supporte en dehors de Databricks (Trino, Flink)
from delta.tables import DeltaTable from pyspark.sql import SparkSession spark = SparkSession.builder .config("spark.jars.packages", "io.delta:delta-core_2.12:2.4.0") .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") .getOrCreate() # Créer une table Delta df.write.format("delta").partitionBy("date").save("/data/delta/orders") # Lire avec Time Travel df_yesterday = spark.read.format("delta") .option("versionAsOf", 5) .load("/data/delta/orders") # MERGE (upsert) sur Delta delta_table = DeltaTable.forPath(spark, "/data/delta/orders") delta_table.alias("t").merge( source_df.alias("s"), "t.order_id = s.order_id" ).whenMatchedUpdateAll() .whenNotMatchedInsertAll() .execute() # OPTIMIZE + ZORDER spark.sql("OPTIMIZE delta.`/data/delta/orders` ZORDER BY (customer_id)") spark.sql("VACUUM delta.`/data/delta/orders` RETAIN 168 HOURS")
  • ACID transactions — Delta Lake garantit l'atomicité : un job qui échoue à mi-chemin ne laisse pas de données corrompues. Impossible avec du Parquet brut
  • Schema enforcement — Delta rejette les écritures avec un schéma incompatible. Schema evolution avec mergeSchema=true pour ajouter des colonnes
  • Small files problem — OPTIMIZE compacte les petits fichiers Parquet en gros fichiers. ZORDER trie les données pour le pruning

3Apache Iceberg : le standard multi-engine

Question discriminante

En quoi Iceberg est-il superieur a Delta Lake pour les environnements multi-engine ?

  • Ouvert et portable — supporte nativement par Spark, Trino, Flink, Hive, Dremio, Athena (AWS), BigQuery. Pas de dependance a un vendeur
  • Partition evolution — changer le schema de partitionnement sans réécrire les donnees. Delta Lake ne le permet pas nativement
  • Hidden partitioning — les users n ont pas besoin de connaitre la structure de partition pour ecrire des requetes efficaces
  • Catalog — Iceberg Catalog (REST, Hive, Glue, Nessie). Metadata centralisee pour la gouvernance
  • Adoption 2025 — AWS, Google Cloud et Azure supportent Iceberg nativement. Tendance forte
-- Iceberg avec Spark SQL CREATE TABLE catalog.db.orders ( order_id BIGINT, customer_id BIGINT, amount DOUBLE, order_date DATE ) USING iceberg PARTITIONED BY (days(order_date)); -- Time Travel Iceberg SELECT * FROM catalog.db.orders FOR SYSTEM_TIME AS OF '2025-01-01 00:00:00'; -- Compaction Iceberg CALL catalog.system.rewrite_data_files( table => 'db.orders', strategy => 'sort', sort_order => 'zorder(customer_id, amount)' ); -- Expirer les snapshots anciens CALL catalog.system.expire_snapshots( table => 'db.orders', older_than => TIMESTAMP '2025-01-01 00:00:00' );
  • Format ouvert — Iceberg n'est pas lié à Databricks. Fonctionne avec Spark, Trino, Flink, DuckDB, BigQuery Omni
  • Row-level deletes — DELETE FROM ... WHERE fonctionne sans réécrire toute la partition. Copy-on-write (défaut) ou Merge-on-read (pour les DELETE fréquents)
  • Partition evolution — changer la stratégie de partition sans réécrire les données. Impossible avec Hive
  • Catalog Iceberg — REST Catalog (Polaris, Nessie), AWS Glue, Hive Metastore. Le catalog maintient les métadonnées et les snapshots

4Apache Hudi : le specialiste du CDC

Question discriminante

Quand utilisez-vous Hudi plutot que Delta ou Iceberg ?

  • Hudi — optimise pour les upserts frequents et le CDC (Change Data Capture). Deux types de tables : COW (Copy-on-Write) et MOR (Merge-on-Read)
  • COW — réécrire les fichiers a chaque update. Lecture rapide, ecriture lente
  • MOR — ecrire les updates dans des fichiers delta, merger a la lecture. Ecriture rapide, lecture plus lente
  • Cas d usage — pipelines de CDC depuis des bases transactionnelles (Debezium + Hudi), donnees qui changent souvent

5Comparaison des trois formats

Delta LakeIcebergHudi
ACIDOuiOuiOui
Time TravelOui (delta_log)Oui (snapshots)Oui (commits)
Partition EvolutionLimiteeCompleteLimitee
Multi-engineMoyen (Databricks-centric)ExcellentBon
Upsert/CDCBon (MERGE)BonExcellent (MOR)
Ecosysteme cloudAzure (Fabric), DatabricksAWS, GCP, AzureAWS EMR

6Comment choisir en pratique

  • Stack Databricks ou Azure → Delta Lake. Natif, tres bien integre
  • Multi-cloud, multi-engine, independance vendeur → Iceberg. Standard emergent
  • CDC intensif depuis bases transactionnelles → Hudi. Upserts optimises
  • Greenfield 2025 → Iceberg. L ecosysteme converge vers Iceberg comme standard ouvert
  • Delta Lake — standard de facto dans l'écosystème Databricks/Spark. Meilleures performances avec Photon. Open source depuis 2019
  • Apache Iceberg — format ouvert multi-engine. Choix stratégique pour éviter le vendor lock-in Databricks. Adopté par Netflix, Apple, AWS
  • Apache Hudi — optimisé pour les upserts fréquents (use case fintech, IoT). Moins répandu que Delta/Iceberg en 2025
  • Tendance 2025 — Iceberg gagne du terrain car AWS, Google et Snowflake le supportent nativement. Delta reste dominant si stack Databricks

Tendance 2025 : Delta Lake et Hudi ont annonce la compatibilite avec le format Iceberg. La guerre des formats est en train de se terminer en faveur d Iceberg comme standard de lecture.

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirmeDelta Lake ou Iceberg, ACID, Time Travel, MERGEExplique pourquoi Parquet seul ne suffit pas, a utilise Delta MERGENe sait pas ce qu est un table format
SeniorComparaison Delta/Iceberg/Hudi, choix selon le contexteJustifie le choix du table format selon l ecosysteme, connait la partition evolution IcebergNe connait qu un seul table format

Vous recrutez un Data Engineer architecte lakehouse ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.