Depuis des années, la communauté de l'ingénierie des données fait face aux compromis entre entrepôts de données et lacs de données. Les entrepôts offraient des performances de requêtes structurées mais manquaient de flexibilité, tandis que les lacs de données offraient une évolutivité et une rentabilité considérables mais souffraient de problèmes de fiabilité, notamment en matière de changements de schéma et de cohérence. Voici Apache Iceberg, un format de table open source conçu pour résoudre ces problèmes en apportant la puissance d'une base de données relationnelle à l'échelle massive du stockage cloud.
La philosophie fondamentale : Les métadonnées avant les données
Contrairement aux formats de fichiers traditionnels comme CSV ou Parquet, où la structure est intégrée directement dans les fichiers, Apache Iceberg sépare les métadonnées des données. Il stocke les métadonnées de la table dans un format centralisé et hautement optimisé (généralement JSON ou Protobuf) au sein du stockage d'objets (comme S3, GCS ou Azure Blob Storage). Cette séparation permet à Iceberg de prendre en charge des fonctionnalités avancées telles que le voyage dans le temps, l'évolution du schéma et le traitement incrémental, sans nécessiter de réécritures de données coûteuses.
Une évolution du schéma simplifiée
L'un des points de douleur les plus courants en ingénierie des données est la gestion des schémas changeants. Dans les configurations traditionnelles, l'ajout d'une colonne peut nécessiter la réécriture de toute la table ou risquer d'entraîner des échecs de requête. Iceberg vous permet d'ajouter, de supprimer ou de renommer des colonnes dynamiquement. La clé ici est la compatibilité descendante ; les anciennes requêtes continuent de fonctionner en utilisant l'ancien instantané du schéma.
Considérez la commande Spark SQL suivante pour ajouter une nouvelle colonne à une table Iceberg existante :
ALTER TABLE sales ADD COLUMN customer_segment STRING;
Cette opération est instantanée car elle ne met à jour que les fichiers de métadonnées. Les fichiers de données Parquet sous-jacents restent inchangés jusqu'à ce que de nouvelles données soient écrites avec le nouveau schéma, garantissant ainsi une disponibilité continue et une surcharge de stockage minimale.
Voyage dans le temps : Interroger le passé
Le voyage dans le temps est peut-être l'avantage le plus intuitif d'Iceberg. Chaque transaction créant un nouvel identifiant d'instantané, vous pouvez interroger vos données telles qu'elles existaient à n'importe quel moment. Cela est inestimable pour déboguer les problèmes de qualité des données, se conformer aux exigences d'audit ou effectuer des analyses à un instant T.
Vous pouvez interroger un instantané spécifique en utilisant son ID ou un horodatage. Par exemple :
-- Interroger la table telle qu'elle existait il y a 24 heures
SELECT * FROM sales TIMESTAMP AS OF '2023-10-27 10:00:00';
Cette fonctionnalité élimine le besoin de maintenir des tables de "sauvegarde" séparées pour les données historiques, réduisant considérablement les coûts de stockage et la complexité opérationnelle.
Partitionnement et saut de données
Un partitionnement efficace est crucial pour la performance. Iceberg prend en charge le partitionnement statique et dynamique. Contrairement au partitionnement de style Hive, qui peut entraîner des "problèmes de petits fichiers" et des structures de répertoires excessives, Iceberg suit les partitions dans les métadonnées. Cela permet un saut de données avancé, où les requêtes ne scannent que les métadonnées pour déterminer quels fichiers contiennent les données pertinentes, ignorant ainsi des fichiers entiers qui ne correspondent pas aux conditions de filtrage.
De plus, Iceberg prend en charge le Z-ordering et le clustering, ce qui aide à optimiser les requêtes sur les colonnes non partitionnées en regroupant physiquement les données connexes.
Optimisation des requêtes et performances Lakehouse
Apache Iceberg est indépendant du moteur, ce qui signifie qu'il fonctionne de manière transparente avec Apache Spark, Trino, Flink et Presto. Cette flexibilité permet aux organisations d'adopter une architecture "Lakehouse", où une seule copie des données sert à la fois aux charges de travail par lots et en streaming avec une haute performance. En tirant parti des métadonnées pour les statistiques et le saut de données, Iceberg permet aux moteurs SQL d'effectuer des agrégations et des jointures complexes avec une efficacité comparable à celle des entrepôts de données traditionnels.
Conclusion
Apache Iceberg représente un bond en avant significatif dans la technologie des lacs de données. En découplant les métadonnées des données, il offre la flexibilité d'un lac avec les performances et la fiabilité d'un entrepôt. Pour les développeurs souhaitant moderniser leur pile de données, maîtriser Iceberg n'est pas seulement une option, c'est une nécessité. Que vous traitiez des évolutions de schéma complexes ou que vous ayez besoin de traces d'audit historiques, Iceberg offre une solution robuste et open source qui évolue avec vos besoins en données.