Que fait patrons-de-transformation-dbt ?
Maîtrisez dbt (data build tool) pour l'ingénierie analytique avec l'organisation des modèles, les tests, la documentation et les stratégies incrémentales. À utiliser lors de la construction de transformations de données, de la création de modèles de données ou de la mise en œuvre des meilleures pratiques en ingénierie analytique.
Vue d'ensemble
Ce skill vous guide dans la configuration d'un projet dbt conforme aux meilleures pratiques, notamment :
- Organisation des modèles : Structurer les modèles en sources, intermédiaires, faits et dimensions.
- Tests de données : Mettre en œuvre des tests de contraintes, de relations et des tests personnalisés.
- Documentation : Générer et maintenir une documentation de modèle complète.
- Stratégies incrémentales : Configurer des chargements incrémentaux efficaces.
- Packages : Utiliser des packages dbt comme
dbt_utilspour des fonctionnalités étendues.
Exemple de structure de projet
mon_projet/
├── models/
│ ├── staging/
│ │ ├── stg_ventes.sql
│ │ └── stg_clients.sql
│ ├── intermediate/
│ │ └── int_ventes_par_client.sql
│ ├── marts/
│ │ ├── sales/
│ │ │ ├── fct_ventes.sql
│ │ │ └── dim_clients.sql
│ │ └── marketing/
│ └── sources.yml
├── tests/
│ └── test_mon_test_personnalise.sql
├── macros/
│ └── ma_macro.sql
├── dbt_project.yml
└── README.md
Exemple de code
Exemple de modèle source (models/staging/stg_ventes.sql)
with source_ventes as (
select * from {{ source('ecommerce', 'ventes') }}
),
renommes_sans_valeurs_nulles as (
select
id_vente,
id_client,
montant,
date_vente,
row_number() over (partition by id_vente order by date_vente desc) as rn
from source_ventes
where id_vente is not null
)
select * from renommes_sans_valeurs_nulles where rn = 1
Exemple de faits (models/marts/sales/fct_ventes.sql)
{{ config(
materialized='incremental',
unique_key='id_vente',
incremental_strategy='merge',
on_schema_change='sync_all_columns'
) }}
select
stg.id_vente,
dim.id_client,
stg.montant,
stg.date_vente
from {{ ref('stg_ventes') }} stg
left join {{ ref('dim_clients') }} dim on stg.id_client = dim.id_client
{% if is_incremental() %}
where stg.date_vente > (select max(date_vente) from {{ this }})
{% endif %}
Exemple de dimension (models/marts/sales/dim_clients.sql)
{{ config(
materialized='table',
unique_key='id_client'
) }}
select
id_client,
nom_client,
email_client,
date_premiere_commande,
date_derniere_commande,
current_timestamp as date_mise_a_jour
from {{ ref('stg_clients') }}
Fichiers de test
Exemple schema.yml
version: 2
models:
- name: fct_ventes
description: Table de faits des ventes
columns:
- name: id_vente
tests:
- unique
- not_null
- name: id_client
tests:
- not_null
- name: montant
tests:
- not_null
- dbt_utils.accepted_range(min_value=0)
- name: dim_clients
description: Dimension clients
columns:
- name: id_client
tests:
- unique
- not_null
- name: email_client
tests:
- not_null
- unique
Exemple de test personnalisé (tests/test_mon_test_personnalise.sql)
-- Vérifie que le montant des ventes ne dépasse jamais une limite logique
select *
from {{ ref('fct_ventes') }}
where montant > 1000000
Packages recommandés
packages.yml
packages:
- package: dbt-labs/dbt_utils
version: ">=1.0.0"
- package: dbt-labs/codegen
version: ">=0.8.0"
Sources
models/sources.yml
version: 2
sources:
- name: ecommerce
description: Sources de la base de données e-commerce
tables:
- name: ventes
description: Table brute des ventes
columns:
- name: id_vente
description: Identifiant unique de la vente
tests:
- unique
- not_null
- name: clients
description: Table brute des clients
Génération de documentation
dbt docs generate
dbt docs serve
Conseils supplémentaires
- Nommer les modèles : Utilisez des noms descriptifs et en minuscules (ex.
stg_ventes,dim_clients). - Dossiers : Séparez les résultats (marts) par domaine métier (ventes, marketing, etc.).
- Tests : Testez toujours les colonnes avec des tests de contraintes (unique, not_null) et de relations (relationships).
- Incremental : Pour les tables volumineuses, préférez une matérialisation incrémentale avec une fusion et une stratégie de changement de schéma appropriée.
Conclusion
Ce skill vous donne une base solide pour utiliser dbt dans vos projets d'ingénierie analytique. Adaptez les exemples et les structures en fonction de vos besoins métier et de vos sources de données.