Scroll Top

Introduction à dbt sous Azure Databricks

Hamza ZELMAT, TECH LEAD DATA

Dans le domaine du traitement des données, nous sommes souvent confrontés à des défis de transformation et d’orchestration, avec des volumes de données qui ne cessent de croître. Dans un monde parfait, il suffirait de cliquer sur un bouton pour que toutes les données soient transformées et organisées de manière idéale. Malheureusement, nous savons que la réalité est toute autre.

En tant que data engineer, il est important de se tenir informé de l’évolution constante des outils d’ingestion de données, dans un contexte où les entreprises doivent gérer des flux considérables d’informations. Certains outils peuvent aider et accélérer la conception de nouveaux pipelines de données en :

  • Optimisant la qualité des données
  • Facilitant la collaboration entre les équipes
  • Améliorant la scalabilité de leurs solutions d’analyse de données.

Dans cet article, nous présentons les atouts offerts par Databricks et dbt (Data Build Tool) pour concevoir aisément des transformations de données. Nous abordons la configuration conjointe des deux outils afin de proposer une solution exhaustive pour le traitement des données. Nous conclurons par un cas d’usage simple.

Qu’est-ce que dbt ?
Dbt, logiciel open-source, est devenu très populaire ces dernières années. Il permet aux Data Engineers et Data Analysts de construire, tester et déployer des pipelines de données performantes et facilement maintenables. Dbt se divise en deux versions principales :
  • dbt Core : version open-source de dbt, qui fournit les fonctionnalités de base pour la modélisation, le test et la documentation des données. dbt Core s’installe localement sur une machine ou serveur et s’utilise en ligne de commande.
  • dbt Cloud : version hébergée et managée de dbt, proposée en tant que service (SaaS). dbt Cloud offre toutes les fonctionnalités de dbt Core, mais ajoute également des fonctionnalités avancées telles que l’interface graphique, l’orchestration intégrée, les déploiements automatisés et la gestion d’accès des utilisateurs.
Dbt est spécialement conçu pour faciliter le travail avec des bases de données relationnelles. Il utilise une syntaxe similaire aux instructions SQL pour transformer les données et permet de créer des modèles de données, de réaliser des tests avant la mise en production et d’automatiser la documentation. Dbt est compatible avec différentes bases de données telles que Microsoft SQL Server, Azure SQL Server, Snowflake, BigQuery, MySQL, AWS, Oracle et d’autres. Il est également compatible avec de nombreux outils ETL/ELT tels que Databricks ou Talend. Il peut être intégré avec la plupart des outils de marché qui permettent de transformer et de charger des données dans une base de données. Dbt se distingue également des autres outils ETL/ELT, car il est basé sur des modèles CLI. Au lieu de concevoir visuellement des flux de données, vous pouvez configurer vos transformations en utilisant des modèles SQL ou des notebooks. En outre, dbt ne se contente pas de trier et de transformer des données, mais va plus loin en permettant de gérer les dépendances entre les différentes étapes d’un processus de transformation de données, de sorte que les données soient traitées dans le bon ordre.
Qu’est-ce que databricks ?
Databricks est une plateforme d’analyse et de traitement de données s’appuyant sur le cloud qui permet aux data engineers, data scientists et analystes de travailler ensemble sur des projets de big data et d’intelligence artificielle. La plateforme est construite sur Apache Spark, un moteur de traitement de données distribué open-source, qui permet aux utilisateurs de traiter de grandes quantités de données de manière efficace. Elle permet de développer des applications à l’aide de plusieurs langages de programmation (Python, R, SQL, Scala et Java) ainsi que de travailler avec des données structurées ou non. Databricks offre de nombreuses fonctionnalités clés qui facilitent la collaboration entre les utilisateurs :
  • Databricks Runtime : Un environnement d’exécution optimisé qui inclut des bibliothèques et des extensions pour Apache Spark, permettant des performances accrues et une meilleure fiabilité.
  • Databricks Workspace : Un environnement de développement collaboratif qui permet aux utilisateurs de créer des notebooks, d’exécuter des commandes et de partager des résultats avec leurs collègues.
  • Connectivité des données : Databricks permet de se connecter à diverses sources de données, y compris les data lakes, les data warehouses, les bases de données relationnelles et non relationnelles, et les API.
  • Delta Lake : Une couche de stockage open-source qui apporte de nouvelles fonctionnalités aux data lakes, telles que la gestion des transactions ACID, l’historique des versions
  • Autoscaling et gestion des ressources : La plateforme Databricks permet l’autoscaling des clusters pour gérer efficacement les ressources en fonction de la charge de travail, optimisant ainsi les coûts et les performances.
  • Sécurité et conformité : Databricks offre des fonctionnalités de sécurité avancées, telles que le chiffrement des données au repos et en transit, l’authentification unique (SSO), l’intégration avec les services d’identité et le contrôle d’accès basé sur les rôles (RBAC).
  • Integration avec les écosystèmes cloud : Databricks s’intègre parfaitement avec les principales plateformes cloud (AWS, Azure et GCP), offrant une compatibilité avec les services de stockage, d’analyse et de machine learning de ces plateformes.
Enfin, Databricks propose plusieurs options de facturation. Il est important de noter que les montants varient selon les fonctionnalités et la capacité choisies (pour plus de détails sur Azure, je vous renvoie à la documentation de Microsoft).
Comment configurer dbt avec Databricks ?
Pour configurer dbt avec Databricks, plusieurs étapes sont nécessaires. Tout d’abord, il faut installer dbt et configurer un cluster Databricks. Ensuite, il est indispensable de créer un profil dbt pour se connecter au cluster. Une fois la configuration effectuée, il est possible d’écrire des modèles dbt pour extraire et transformer les données selon les besoins exprimés. Voici un aperçu simplifié des étapes à suivre pour configurer dbt avec Databricks :
  • Installer dbt et le connecteur Python pour Databricks
  • Configurer un cluster Databricks
  • Créer un profil dbt pour se connecter au cluster Databricks
  • Écrire des modèles dbt pour extraire et transformer vos données
  • Exécuter votre projet dbt
Avant de commencer la configuration, il est important de présenter un contexte dans lequel dbt peut être utilisé avec Databricks. Ci-dessous, vous trouverez une représentation simple de l’architecture Delta Lake qui prend en compte les deux outils (Figure 1) :
Figure 1 : Architecture Delta Lake
Installation
Pour commencer, nous devons installer dbt et le connecteur Databricks Python sur une machine locale. Cette installation peut se faire via une commade pip afin d’installer le package relatif à Databricks :
pip install dbt-databricks
Cette étape terminée, nous pouvons vérifier la version installée (Figure 2) en utilisant la commande suivante :
dbt –version
Configuration du cluster Azure Databricks
L’étape suivante consiste à créer un cluster Databricks et à configurer les autorisations pour accéder aux données. (Figure 3)
Figure 2 : Version dbt
Figure 3 : Configuration du cluster Databricks
NB : Cet article n’ayant pas vocation à détailler les étapes de création d’un cluster, nous renvoyons les lecteurs désireux d’avoir de plus amples informations sur le sujet à la documentation très complète de Microsoft.
Configuration d’un Secret Scope
Une fois que le cluster est configuré, nous pouvons créer une connexion sécurisée entre Databricks et Key Vault en utilisant Secret Scope. Pour cela, nous allons ajouter #secrets/createScope à la fin de l’URL de l’espace de travail Databricks :
https://<databricks-instance>#secrets/createScope
Une fois sur la page spécifiée, nous allons créer un nouveau scope que l’on nommera dbtScope. (Figure 4) Celui-ci va nous permettre d’accéder aux secrets gérés dans le Key Vault. Pour ce faire, le DNS Name ainsi que le ressource ID du Key Vault doivent être renseignés aux l’emplacements appropriés :
Figure 4 : Création du Secret Scope databricks
Ces informations sont accessibles depuis l’écran de propriétés de la ressource Key Vault (Figure 5) :
Figure 5 : Propriétés de la ressource Key Vault Azure

La configuration terminée, nous pouvons tester la connexion en exécutant la commande suivante depuis l’invite de commande Windows (Figure 6) :

databricks secrets list-scopes
Figure 6 : Test de connexion
Connexion Databricks – Compte de stockage
Dans le cadre de cet article, il sera nécessaire d’autoriser Databricks à accéder au compte de stockage. Pour ce faire, nous allons récupérer la clé d’accès du compte de stockage et l’ajouter au Key Vault en générant une clé secrète, comme illustré ci-dessous (Figure 7 & 8) :
Figure 7: Récupération de la clé d’accès du compte de stockage
Figure 8 : Création du secret blobAccountKey1 dans le Key Vault
Il ne reste plus qu’à valider la connexion entre databricks et le compte de stockage Azure à l’aide du Key Vault. Dès lors, il suffit de créer un bloc-notes depuis Databricks et saisir les commandes suivantes avant d’exécuter. (Figure 9) :
abcd = dbutils.secrets.get(‘dbtScope’, ‘blobAccountKey1’)
print (abcd)

dbutils.fs().mounts() list-scopes
Figure 9 : Validation de la connexion entre databricks et le compte de stockage Azure
Il apparait ci-dessus que le conteneur Azure est bien accessible depuis databricks.
Accès dbt – Cluster Databricks
Désormais, un profil dbt peut être créé pour se connecter au cluster Databricks (Figure 10). Tout d’abord, nous allons dans les paramètres de l’utilisateur (User Settings) Databricks pour générer un token d’accès personnel :
Figure 10 : Interface de la génération du token databricks
Une fois le jeton créé, nous passons à la configuration du fichier « profiles.yml », relatif à dbt, pour ajouter une section pour le cluster Databricks. Ce fichier peut être trouvé à la racine C:\ selon l’installation depuis « pip » (Figure 11) :
Figure 11 : Configuration du fichier "profiles.yml"
On complète alors les informations suivantes :
  • Host: instance Databricks
  • http_path: URL du cluster
  • schema: schéma de la base de données
  • token: token d’accès personnel de l’utilisateur à Databricks
  • type: ressource utilisée (databricks, snowflake, redshift, …)
Enfin, on vérifie la connexion depuis dbt vers databricks en exécutant la commande suivante (Figure 12) :

dbt debug

Figure 12 : Exécution de la commande
Création d’un projet dbt
Maintenant que le profil dbt est configuré, nous pouvons initier un projet dbt avec la commande :

dbt init <nom_projet>

Cette commande crée une structure de répertoires et de fichiers standard pour le projet. (Figure 13)
Figure 13 : Création du projet dbt
Voici les principales caractéristiques des répertoires du projet standard (Figure 14) :
  • analyses : ce répertoire contient des modèles dbt utilisés pour effectuer des analyses exploratoires de données. Les modèles d’analyse sont généralement moins structurés que les modèles de transformation de données et peuvent être utilisés pour explorer les données et générer des rapports.
  • macros : ce répertoire contient des fichiers SQL réutilisables, appelés « macros », qui peuvent être invoqués dans des modèles dbt. Les macros peuvent effectuer des tâches telles que la conversion de formats de données ou l’agrégation de données et peuvent simplifier le processus de développement de modèles.
  • models : c’est le répertoire principal où sont stockés tous les modèles dbt. Les modèles sont des fichiers SQL contenant des requêtes pour extraire, transformer et charger des données. Chaque modèle peut avoir une ou plusieurs dépendances avec d’autres modèles ou fichiers.
  • seeds : ce répertoire contient des fichiers de données initiales, également appelées données de départ ou données d’amorçage. Les fichiers de données sont utilisés pour initialiser les tables d’un entrepôt de données avec des données de test ou des données de production. Les fichiers de données sont au format CSV, JSON, YAML ou SQL.
  • snapshots : ce répertoire contient des modèles dbt qui créent des « snapshots » de nos tables dans leur état actuel. Les snapshots sont des copies des données dans une table à un moment précis et peuvent être utilisés pour suivre les changements dans les données au fil du temps. Les modèles de snapshot peuvent être planifiés pour s’exécuter régulièrement, créant ainsi un historique des données dans nos tables.
  • tests : ce répertoire contient des modèles dbt utilisés pour tester la qualité des données dans un entrepôt de données. Les tests dbt peuvent vérifier des choses comme la conformité des données aux contraintes de base de données ou l’exactitude des agrégats de données.
  • yml: Il s’agit d’un fichier de configuration YAML utilisé par dbt pour définir les propriétés du projet. Il est utilisé pour définir des paramètres tels que le nom du projet, les informations d’identification pour se connecter à un entrepôt de données, les dépendances de projet et les plugins dbt à utiliser.
Figure 14 : Principales caractéristiques des répertoires dbt du projet standard
Exécution des transformations
Une fois les modèles créés, nous les exécutons pour extraire et transformer des données. Ils peuvent être exécutés localement en utilisant dbt, ou depuis le cluster Databricks en utilisant le connecteur Python Databricks. Pour exécuter des modèles dbt sur notre cluster Databricks, nous utilisons la commande (Figure 15) :

dbt run

Figure 15 : Exécution du projet dbt
Voilà, la configuration de dbt avec databricks est désormais opérationnelle, nous pouvons mettre en place un cas d’usage simple. Il est important de noter que les étapes présentées ci-avant sont un exemple simplifié de l’utilisation de dbt avec databricks. La complexité de l’architecture finale dépendra des besoins spécifiques de chaque projet.
Cas d’usage de dbt avec databricks pour la transformation de données
Dans cette partie, nous allons vous présenter un cas d’utilisation simple visant à créer une table de dimension à l’aide de transformations de données d’une couche Silver vers une couche Gold. (Figure 16)
Figure 16 : Focus du cas d'usage
Avant de commencer, nous avons besoin de plusieurs éléments dans le conteneur Silver pour pouvoir préparer les transformations vers le Gold. Il est essentiel d’avoir des fichiers au format « .parquet » dans le conteneur Silver afin de pouvoir les manipuler depuis Databricks. (Figure 17)
Figure 17 : Vue d'ensemble du répertoire Silver
Concernant les transformations à appliquer, il nous faut au préalable préparer un jeu de données à manipuler. Dans notre cas d’utilisation de dbt, nous avons à notre disposition des tables dans une base de données snapshots. Cette base contient une image des tables dans leur état au moment du chargement entre les couches BRONZE et SILVER. (Figure 18)
Figure 18 : Vue d'ensemble des données Silver présentes dans databricks
Nous allons créer une table de dimension dénormalisée nommée dim_product, en joignant deux tables de la couche SILVER et en effectuant quelques transformations. Pour cela, nous avons besoin des données « product_snapshot » et « productcategory_snapshot » pour constituer cette dimension. Après avoir développé le code SQL nécessaire, la prochaine étape consiste à configurer deux fichiers dans le répertoire models de dbt pour charger les données (Figure 19) :
Figure 19 : Répertoire de stockage des fichiers models dbt
Le fichier dim.product.sql est utilisé pour écrire des requêtes SQL pour la création d’objets de base de données et pour la transformation de données nécessitant des fonctions SQL avancées qui ne peuvent pas être exprimées à l’aide du langage de balisage YAML. La première partie du fichier correspond à la configuration de la dimension afin qu’elle soit hébergée dans le conteneur GOLD à l’emplacement désirée : (Figure 20)
Figure 20 : Configuration de la dimension GOLD
La seconde partie du fichier contient la requête SQL nécessaire à la création de la dimension dim_product. Cette requête voit la mise en œuvre de transformations spécifiques afin de répondre à une logique métier (Figure 21) :
  • Le contenu de la colonne « Color» est mis en majuscule.
  • Deux colonnes « ProductCategoryID» et « Name » sont concaténées pour créer une unique colonne « ProductCategoryName ».
  • Une jointure est réalisée entre les jeux de données « productcategory_snapshot » et « product_snapshot » pour récupérer la colonne concaténée « ProductCategoryName ».
Figure 21 : Script SQL de la dimension
Maintenant que le fichier SQL est configuré, nous passons à la configuration du fichier YML dim_product.yml. Ce fichier sert à définir les modèles de données de l’entrepôt cible en utilisant le langage de balisage YAML. Il contient des informations sur la clé primaire et peut exécuter des tests sur les données uniques. (Figure 22)
Figure 22 : Configuration du ficher YML
La configuration est maintenant terminée !
Nous découvrons enfin le résultat en exécutant la commande « dbt run » depuis l’invit de commande Windows (Figure 23) :
Figure 23 : Exécution du projet dbt
Après avoir exécuté le modèle, nous pouvons vérifier que la dimension « dim_product » a bien été créée dans la couche GOLD de notre espace de stockage Azure. (Figure 24)
Figure 25 : Table des données de la dimension dans databricks
Conclusion
Après avoir examiné l’utilisation commune de dbt et databricks, il apparait que ces deux outils offrent des fonctionnalités avancées pour le traitement des données massives. Dbt et databricks sont conçus pour gérer de grands volumes de données grâce à une scalabilité accrue. Ensemble, ils forment une paire de choix pour les Data Engineers et les Data Analysts qui cherchent à traiter des problématiques de données complexes. En outre, dbt est une excellente option pour les utilisateurs de SQL, car il leur permet de gérer les pipelines de données facilement et efficacement tout en utilisant le langage de requête qu’ils connaissent déjà. En conclusion, dbt et databricks constituent une solution gagnante pour les entreprises qui souhaitent exploiter pleinement leurs données. Si vous souhaitez découvrir comment mettre en place une chaîne complète d’alimentation d’un Delta Lake depuis dbt et databricks, restez connecté pour la suite !

Fin

Leave a comment

Privacy Preferences
When you visit our website, it may store information through your browser from specific services, usually in form of cookies. Here you can change your privacy preferences. Please note that blocking some types of cookies may impact your experience on our website and the services we offer.