Beaucoup d’entre nous ont apporté des modifications aux données en fonction d’exigences qui évoluent ultérieurement. Au moment où nous nous en rendons compte, il devient impossible de revenir en arrière. Le changement n'est pas seulement une constante ; il s'agit d'un élément essentiel de la gestion des données qui nécessite une approche sophistiquée. Entrez dans la fonctionnalité de type Git du catalogue de données Nessie de Dremio.
Tout comme Git est devenu fondamental pour le développement de logiciels, les ingénieurs de données ont besoin d'outils similaires pour travailler en parallèle, comparer les versions de données, promouvoir les modifications de la production et restaurer les données si nécessaire. Nessie fournit aux ingénieurs de données un système de contrôle de version de type Git pour gérer les versions, les branches, les fusions et les validations de données. Cela peut être très utile lorsque plusieurs ingénieurs de données travaillent et transforment des données en même temps. Nessie permet à chaque ingénieur de travailler dans des branches distinctes tout en conservant une seule source de vérité sous la forme de la branche principale. Cette fonctionnalité permet aux équipes d'ingénierie de données de maintenir la qualité des données de manière collaborative face à des changements incessants.
Cet article fournit un guide étape par étape démontrant comment Nessie, Dremio et MinIO travaillent ensemble pour améliorer la qualité des données et la collaboration dans vos flux de travail d'ingénierie des données. Que vous soyez un ingénieur de données, un ingénieur ML ou simplement un passionné de lacs de données modernes, ce blog vous fournit les connaissances et les outils nécessaires pour améliorer efficacement vos pratiques de gestion des versions de données.
Nessie autorise des charges de travail de type Git qui vous permettent de tester, de développer et de passer en production. Décomposons quelques concepts clés :
Branches : tout comme dans Git, les branches de Nessie vous permettent de travailler simultanément sur différentes tâches d'ingénierie de données. Par exemple, vous pourriez avoir une branche pour le développement de fonctionnalités, le nettoyage et la transformation des données. Chaque branche peut avoir son propre ensemble de modifications de données.
Commits : dans Nessie, un commit représente un instantané des données à un moment précis. Lorsque vous apportez des modifications à vos données, vous créez un nouveau commit qui enregistre ces modifications. Les commits sont liés à une branche spécifique. Lorsque vous devez restaurer vos données dans un état stable ou connu, Nessie facilite la sélection d'une validation spécifique et le retour à cette version de données. Cela garantit la qualité et la cohérence des données.
Fusions : Nessie permet de fusionner les modifications d'une branche à une autre. Ceci est similaire à la fusion des modifications de code dans Git. Lorsque vous fusionnez une branche, les modifications de données apportées dans cette branche font partie de la branche cible.
Dremio est un moteur d'analyse distribué qui fonctionne comme une plateforme open source, offrant une interface intuitive en libre-service pour l'exploration, la transformation et le travail collaboratif des données. Sa conception est ancrée dans
Nous avons déjà expliqué comment déployer Dremio avec Kubernetes, ainsi que comment
MinIO est un stockage objet hautes performances. Réputé pour son caractère exceptionnel
Vous aurez besoin du
Cette partie du tutoriel est basée sur Dremio
Pour commencer, ouvrez un terminal et accédez au dossier dans lequel vous avez cloné/téléchargé le dépôt, puis exécutez la commande ci-dessous pour démarrer Dremio.
docker-compose up dremio
Attendez quelques instants, puis accédez à http://localhost:9047
pour accéder à Dremio. Mettez à jour les champs demandés, puis cliquez sur Suivant.
Ensuite, exécutez la commande suivante pour démarrer MinIO.
docker-compose up minio
La commande finale docker-compose up
ci-dessous démarrera Nessie.
docker-compose up nessie
Accédez à http://localhost:9001
pour vous connecter à MinIO avec le nom d'utilisateur et le mot de passe minioadmin:minioadmin
. Vous serez invité à créer un compartiment.
Créez-en un nommé iceberg-datalake
.
Revenez ensuite à Dremio à http://localhost:9047
, cliquez sur Ajouter une source et sélectionnez Nessie.
nessie
http://nessie:19120/api/v2
none
Ne cliquez pas encore sur Enregistrer. Au lieu de cela, dans le panneau de navigation de gauche, cliquez sur Stockage. MinIO est un stockage d'objets compatible S3-API et peut utiliser les mêmes voies de connexion qu'AWS S3.
minioadmin
minioadmin
/iceberg-datalake
Faites défiler vers le bas pour la prochaine série d’instructions.
Add Property
sous Connection Properties
pour créer et configurer les propriétés suivantes.fs.s3a.path.style.access
à true
fs.s3a.endpoint
vers minio:9000
dremio.s3.compat
à true
Encrypt connection
Cliquez ensuite sur Enregistrer. Vous devriez maintenant voir les catalogues Nessie dans vos sources de données.
Dans Dremio, accédez à SQL Runner sur le côté gauche. Assurez-vous que Context
dans la zone supérieure droite de l'éditeur de texte est défini sur notre source Nessie. Sinon, vous devrez référencer le contexte comme nessie.SalesData
au lieu de simplement SalesData
pour exécuter cette requête. Copiez et collez le SQL ci-dessous et exécutez.
CREATE TABLE SalesData ( id INT, product_name VARCHAR, sales_amount DECIMAL, transaction_date DATE ) PARTITION BY (transaction_date);
Exécutez la requête ci-dessous pour insérer des données dans la table que vous venez de créer.
INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES (1, 'ProductA', 1500.00, '2023-10-15'), (2, 'ProductB', 2000.00, '2023-10-15'), (3, 'ProductA', 1200.00, '2023-10-16'), (4, 'ProductC', 1800.00, '2023-10-16'), (5, 'ProductB', 2200.00, '2023-10-17');
Revenez à MinIO pour voir que votre lac de données a été rempli avec les tables Iceberg.
Retournez à Dremio sur http://localhost:9047
. Commencez par interroger une table sur la branche principale en utilisant la syntaxe AT BRANCH
:
SELECT * FROM nessie.SalesData AT BRANCH main;
Créez une branche ETL (Extract Transform and Load) pour vous permettre de jouer avec et de transformer les données sans impacter la production.
CREATE BRANCH etl_06092023 in nessie
Au sein de la branche ETL, insérez de nouvelles données dans la table :
USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');
Confirmez la disponibilité immédiate des nouvelles données au sein de la branche ETL :
SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;
Notez l'isolement des modifications des utilisateurs sur la branche principale :
SELECT * FROM nessie.SalesData AT BRANCH main;
Fusionnez les modifications de la branche ETL dans la branche principale :
MERGE BRANCH etl_06092023 INTO main in nessie;
Sélectionnez à nouveau la branche principale pour voir que les modifications ont bien été fusionnées.
SELECT * FROM nessie.SalesData AT BRANCH main
Cette stratégie de branchement permet aux ingénieurs de données de gérer indépendamment de nombreuses transactions sur plusieurs tables. Lorsqu'ils sont prêts, les ingénieurs de données peuvent fusionner ces transactions en une seule transaction multi-tables complète au sein de la branche principale.
Cet article de blog s'est penché sur la puissance du contrôle de version de type Git dans l'ingénierie des données, en soulignant comment
Faites-nous savoir à quoi ressemble votre data lakehouse
Apparaît également ici .