Retour au Blog

DBT : Portons la transformation de données à un niveau supérieur

Publié:

DBT (pour Data Build Tool) est un outil open source permettant de transformer les données d'un datawarehouse (Google BigQuery, Amazon Redshift, Snowflake, PostgreSQL... doc) en orchestrant des requêtes SQL.

L'outil se base sur les tables de ces bases de données (BDD) pour créer de nouvelles tables, vues ou incrémentations.

En fait DBT est une couche au dessus de ces BDD, il n'éxécute rien, il s'occupe de compiler les requêtes SQL et les envoyer au bon moment aux BDD pour être éxécutées.


1. C'est quoi DBT ?

C'est un package python open source (7.5K ⭐) nommé DBT Core (Github) sur lequel la société DBT Lab a créé un service sous abonnement DBT Cloud qui est un IDE online permettant d'utiliser DBT core. Ce logiciel en ligne permet d'écrirer du code SQL sans avoir à s'occuper de la configuration des serveurs et de maintenir une architecture.

DBT Core

DBT peut être utilisé directement en ligne de commande en local après installation du package.

Je ne vais pas entrer dans le détail de la configuration de l'arborescence et des connexions aux bases de données, vous trouverez tout ici : https://docs.getdbt.com/docs/core/about-the-cli

Le principe est assez simple, les fichiers contenant les requêtes SQL (appelés "models" dans DBT) sont stockées dans un dossier models. On peut éxécuter ensuite chaque table avec la commande dbt run --select nom_table .
Le nom de la table créée est le nom du fichier avec l'extension .sql.
Ex de requête>source
Vous remarquerez que l'on remplace le nom de la table source par {{ ref('nom_table') }} si c'est un autre model ou {{ source('nom_dataset', 'nom_table') }} si c'est une table source. Ce templating en langage Jinja permet de remplacer dynamiquement les noms des tables lors de la configuration et permet surtout à DBT de reconstruire le graph de dépendance des tables.
Graph de dépendance
Grâce à ça DBT sait dans quel ordre éxécuter les tables.

Lorsqu'on travaille sur une table il est du coup possible d'éxécuter :

DBT Cloud :

IDE DBT Cloud
Dans DBT Cloud on retrouve notre arborescence DBT avec des fonctionnalités supplémentaires tel que l'affichage du graph de dépendance directement dans l'IDE, un accès plus simple au versioning Github, de l'auto complétion, une documentation créée automatiquement ainsi qu'un espace 'Jobs' avec les commandes d'éxécutions configurées pour tourner en production à certains moments.

2. Les fonctionnalités qui le rendent indispensable


3. Pour aller plus loin :

Il est possible de créer des macros en Jinja qui permettent de changer le comportement de DBT. Par exemple si on veut un comportement spécifique telle que l'application d'un filtre juste en environnement de développement.

Il est possible d'importer des macros grâce aux packages DBT. Les packages sont configurés dans le fichier packages.yml . https://docs.getdbt.com/docs/build/packages et installés avec la commande dbt deps .

Il existe par exemple le package dbt-utils qui permet d'ajouter plus de tests et de fonctions de compilation entre autre.

packages:
- git: "https://github.com/dbt-labs/dbt-utils.git"
revision: 0.9.2 # tag or branch name
package.yml source

Conclusion :
DBT est l'outil parfait lorsqu'on commence à avoir plusieurs requêtes SQL de transformation et donc un graph de dépendances. En effet il nous permet de développer plus en vite en ayant une vision globale du flux de données tout en donnant des outils permettant de vérifier la data quality et assurer la documentation.



Merci de votre lecture et n'hésitez pas à m'envoyer vos commentaires si vous avez eu une expérience avec Airflow ou si vous voulez en savoir plus !

Florian

Retour au Blog

Sources & pour aller plus loin :