Lakehouse : Iceberg et Delta Lake
Iceberg et Delta ajoutent aux fichiers Parquet d'un lac un journal de versions : transactions ACID, mises à jour et voyage dans le temps. On les adopte pour un entrepôt bâti sur un lac.
- lakehouse
- iceberg
- delta
- acid
- time travel
- snapshot
- catalogue
- format de table
Syntaxe
Format de table ouvert = fichiers Parquet + couche de métadonnées métadonnées → liste exacte des fichiers de chaque version (snapshot) écriture → nouvelle version validée d'un coup, ou rien (ACID) catalogue → indique la version courante de chaque tableOpérations rendues possibles sur un lac (exemples en Spark SQL) : MERGE INTO / UPDATE / DELETE SELECT … FROM t VERSION AS OF <id_version> SELECT … FROM t TIMESTAMP AS OF '<horodatage>'Exemple
-- Spark SQL avec Apache IcebergCREATE TABLE lac.ventes.commandes ( commande_id BIGINT, client_id STRING, montant DECIMAL(10, 2), cree_le TIMESTAMP) USING icebergPARTITIONED BY (days(cree_le)); -- partitionnement caché, calculé par Iceberg-- Correction idempotente d'un lot : MERGE atomique sur des fichiers ParquetMERGE INTO lac.ventes.commandes cUSING lot_du_jour l ON c.commande_id = l.commande_idWHEN MATCHED THEN UPDATE SET *WHEN NOT MATCHED THEN INSERT *;-- Une erreur de chargement a été détectée à 10 h : que contenait la table à 6 h ?SELECT COUNT(*) FROM lac.ventes.commandes TIMESTAMP AS OF '2026-11-01 06:00:00';-- 18240 par exemple : le nombre de lignes de la table telle qu'elle était à 6 h,-- avant le mauvais lot (la requête lit la version validée à cette heure-là)-- Lister les versions pour revenir en arrière si besoinSELECT snapshot_id, committed_at, operation FROM lac.ventes.commandes.snapshots;À retenir
- Les lecteurs voient toujours une version complète : pendant qu'un MERGE écrit, une requête lit la version précédente, jamais un mélange d'anciens et de nouveaux fichiers.
- Iceberg sait faire évoluer le schéma et même le partitionnement sans réécrire les données ; Delta propose des fonctions comparables. Le choix dépend surtout des moteurs et du catalogue déjà en place.
- Prévoyez la maintenance : compaction des petits fichiers et expiration des anciennes versions. Sans elle, les métadonnées et le stockage grossissent sans fin.
- Piège : prendre le voyage dans le temps pour une sauvegarde. Dès que les anciennes versions expirent, leurs fichiers sont supprimés ; une vraie sauvegarde reste nécessaire.
Voir aussi
- ParquetParquet range les valeurs colonne par colonne, compressées et accompagnées de statistiques. C'est le format de référence pour stocker des données qu'on va surtout lire et agréger.
- Partitionnement et élagagePartitionner range les fichiers d'une table dans des dossiers selon une colonne, souvent la date. Les requêtes qui filtrent sur cette colonne ne lisent alors que les dossiers utiles.
- Idempotence : rejouer sans doublonUne tâche idempotente produit le même résultat qu'on la lance une fois ou dix. C'est la condition pour relancer un pipeline après une panne sans créer de doublons ni perdre de lignes.
- ETL et ELTL'ETL transforme les données avant de les charger, l'ELT les charge brutes puis les transforme en SQL dans l'entrepôt. L'ELT domine depuis que les entrepôts cloud calculent à la demande.