Les essentiels pour accélérer vos développements DBT
La richesse de l'écosystème dbt réside en grande partie dans ses packages. Je vous présente aujourd'hui les trois que j'utilise le plus fréquemment, en attendant de couvrir des packages plus spécialisés dans de prochains articles.
Qu'est-ce qu'un package dbt ?
Les packages dbt sont des collections de macros, modèles, et autres utilitaires réutilisables conçus pour être intégrés dans des projets dbt. Une fois installé, il est possible d'utiliser les fonctionnalités offertes par le package, ce qui nous évite de réinventer la roue à chaque fois.
Pour installer un package dbt, c'est très simple, il suffit de rajouter quelques lignes au fichier packages.yml
(et le créer s'il n'existe pas déjà) :
packages:
- package: dbt-labs/dbt_utils
version: 1.1.
Dans cet article, je vais aborder trois packages que j'utilise fréquemment, parmi la multitude disponible. Dans les semaines à venir, je me concentrerai sur d'autres packages plus spécialisés.
dbt Utils
Le plus connu des packages dbt, dbt Utils, offre de nombreuses fonctionnalités pour simplifier le développement.
Les tests
dbt Utils enrichit la gamme de tests génériques de dbt, permettant des validations plus poussées. Par exemple, le test dbt_utils.at_least_one
vérifie qu'une colonne contient au moins une valeur.
version: 2
models:
- name: model_name
columns:
- name: col_name
tests:
- dbt_utils.at_least_one
Important : Les tests génériques de dbt_utils permettent rapidement de mettre en place une validation basique de vos données.
Nous verrons juste après qu'il sera possible d'aller encore plus loin dans les tests à l'aide d'un autre package spécifique aux tests.
Le développement
dbt Utils nous permet également d'accélérer le développement de nouveaux modèles en proposant une série de macros. Par exemple, la macro pivot , que j'utilise énormément, permet de transformer les valeurs d'une colonne en colonnes distinctes.
Input: orders
| size | color | quantity |
|------|-------|----------|
| S | red | 1 |
| S | blue | 2 |
| S | red | 4 |
| M | red | 8 |
select
size,
{{ dbt_utils.pivot(
'color',
dbt_utils.get_column_values(ref('orders'), 'color'),
agg='sum',
then_value='quantity'
) }}
from {{ ref('orders') }}
group by size
Output:
| size | red | blue |
|------|-----|------|
| S | 5 | 2 |
| M | 8 | 0 |
À retenir : Le package dbt_utils offre de nombreuses macros qui accélèrent considérablement le développement.
Il y a énormément d'autres choses que nous permet de faire ce package, comme par exemple la génération d'un date spine (une table qui contient toutes les dates possibles) que j'utilise souvent. Je vous laisserais aller voir la doc du package pour découvrir toutes ces possibilités.
dbt Expectations
Alors que dbt Utils est un package général qui couvre beaucoup d'aspects du développement dans dbt, dbt Expectations ne s'intéresse qu'à un point spécifique : les tests.
Ce package offre de nombreux tests génériques qu'il est possible d'utiliser. Aujourd'hui, à chaque fois que je mets en place des tests et que j'ai besoin de développer un nouveau test, je regarde ceux présents dans ce package et dans 90% des cas, l'un des tests répond à mon besoin.
Important : Ce package peut vous faire gagner beaucoup de temps en évitant d'avoir à développer des tests custom.
Par exemple, il est possible de tester si une colonne contient des valeurs croissantes. C'est utile si on a une table qui contient des valeurs qui ne peuvent qu'augmenter (comme des sommes cumulées) :
columns:
- name: cumulated_revenues
tests:
- dbt_expectations.expect_column_values_to_be_increasing:
sort_column: day
strictly: false
group_by: ['store_id']
Nous écrirons un article plus développé sur les tests dans dbt mais ce package nous fait gagner énormément de temps et peut aussi nous donner des idées de tests à implémenter.
dbt Artifacts
dbt Artifacts n'offre pas de macros pour nous aider dans le développement comme le font les deux précédents packages mais il contient des modèles déjà développés qui seront matérialisés automatiquement lors des exécutions. Ces modèles contiennent les Artifacts de dbt.
Les Artifacts dbt sont des fichiers JSON générés par dbt lors de l'exécution de commandes de compilation, d'exécution, et de test. Ils contiennent des métadonnées détaillées sur le projet dbt, y compris la structure des modèles, les résultats des tests, et les informations sur les exécutions de modèles, offrant ainsi une vue d'ensemble de l'état et de la performance du projet de transformation de données.
À retenir : Les artifacts sont essentiels pour comprendre et monitorer l'exécution de vos modèles dbt.
Ainsi ce package nous permet d'avoir toutes ces différentes données dans des modèles :
dim_dbt__current_models
: Modèle de dimension contenant des données sur les exécutions les plus récentes et réussies des modèles.dim_dbt__exposures
: Modèle de dimension contenant des données sur les expositions.dim_dbt__models
: Modèle de dimension contenant des données sur les modèles.dim_dbt__seeds
: Modèle de dimension contenant des données sur les seeds (graines).dim_dbt__snapshots
: Modèle de dimension contenant des données sur les instantanés (snapshots).dim_dbt__sources
: Modèle de dimension contenant des données sur les sources.dim_dbt__tests
: Modèle de dimension contenant des données sur les tests.fct_dbt__invocations
: Modèle de fait contenant des données sur les invocations.fct_dbt__model_executions
: Modèle de fait contenant des données sur les exécutions des modèles.fct_dbt__seed_executions
: Modèle de fait contenant des données sur les exécutions des seeds (graines).fct_dbt__snapshot_executions
: Modèle de fait contenant des données sur les exécutions des instantanés (snapshots).fct_dbt__test_executions
: Modèle de fait contenant des données sur les exécutions des tests.
Je me sers beaucoup de ce package lorsque j'ai besoin de suivre la bonne exécution des modèles et des tests. Nous le verrons la semaine prochaine, nous l'utiliserons pour rapprocher ces données aux données de consommation de ressources envoyées par BigQuery pour pouvoir suivre précisément les coûts de nos modèles DBT.
Important : L'utilisation de ce package est particulièrement pertinente pour optimiser les coûts et performances de vos modèles DBT.
J'espère que la brève présentation de ces trois packages vous a aidé à mieux comprendre à quoi ils pouvaient vous servir dans vos projets. Comme je l'ai dit, ce sont trois packages assez basiques et il en existe d'autres beaucoup plus spécifiques que nous aborderons dans de prochains articles.
Si vous vous posez des questions sur l'utilisation de DBT dans votre organisation, n'hésitez pas à me contacter afin d'échanger plus en détail sur vos besoins.