
Automatisation dbt : mettez en œuvre les bonnes pratiques CI/CD

DBT (Data Build Tool) est un outil open source dédié à la transformation des données dans le cloud, facilitant la gestion des workflows analytiques et la collaboration au sein des équipes data. dbt facilite la modélisation, la transformation et le test de vos données au sein de data warehouses comme BigQuery. En automatisant ces transformations et en incorporant la logique CI/CD (Continuous Integration, Continuous Development), dbt augmente la qualité des workflows et booste la productivité des équipes data.
Configuration et installation de dbt pour BigQuery
Pour bien démarrer avec dbt sur BigQuery, plusieurs étapes sont nécessaires : la préparation du projet GCP, la configuration des accès, puis la mise en place des fichiers de configuration essentiels. Nous allons détailler chacune de ces étapes.
Préparer votre environnement
Pour utiliser dbt avec BigQuery, vous aurez besoin :
- D’un projet Google Cloud Platform (GCP) avec BigQuery activé
- D’un compte de service (alias service account) GCP configuré avec les bonnes permissions pour lire/écrire dans vos datasets BigQuery
- De Visual Studio Code avec un kernel Python actif pour installer dbt via le package dbt-bigquery :
pip install dbt-bigquery
Création et configuration du fichier profiles.yml
Le fichier profiles.yml est la pierre angulaire de la connexion entre dbt et BigQuery. Il doit contenir les informations sur le projet, le dataset, la méthode d’authentification et d’autres paramètres essentiels.
Pour rendre cette configuration plus flexible et sécurisée, il est recommandé d’utiliser des variables d’environnement. Cela permet de paramétrer automatiquement votre connexion selon le contexte d’exécution (local, production, CI/CD). En remplaçant les valeurs fixes par des appels à env_var(), vous pourrez gérer automatiquement les paramètres tels que l’ID projet, le dataset ou encore le chemin de la clé JSON.
Créez ce fichier profiles.yml dans le dossier ~/.dbt (attention aux espaces et aux tabulations) :
your_project_name:
target: dev
outputs:
dev:
type: bigquery
method: service-account
project: "{{ env_var('GCP_PROJECT_ID') }}" # ID GCP
dataset: "{{ env_var('DBT_DATASET') }}" # dataset par défaut
threads: 8 # Peut être ajusté selon la complexité des modèles
timeout_seconds: 300
location: EU # US ou EU
keyfile: "{{ env_var('DBT_KEYFILE') }}" # Chemin relatif ou absolu du fichier écrit dans le répertoire DBT_PROFILES_DIR
Veillez à remplacer chaque variable par vos informations spécifiques (ID projet, dataset, chemin du fichier clé).
Gestion des dépendances avec dbt
dbt gère automatiquement l’ordre d’exécution de vos modèles grâce aux relations définies dans les fichiers SQL et YAML. Par exemple, si un modèle orders dépend d’un modèle customers, dbt s'en occupera :
-- models/orders.sql
select *
from {{ ref('customers') }}
Les fichiers YAML vous permettent aussi de documenter et de configurer tests et dépendances.
Intégration avec les outils de data science
dbt s’intègre avec Python et des bibliothèques de machine learning via les modèles Python (dbt-python models), BigFrames et l’adaptateur dbt-bigquery.
BigFrames permet de manipuler les données stockées dans BigQuery comme des DataFrames, sans les charger en mémoire locale, ce qui évite les limitations liées à la RAM. Le code Python est automatiquement converti en SQL et exécuté côté BigQuery.
Vous pouvez ainsi créer des modèles Python qui manipulent des BigFrames, entraîner des modèles de machine learning sur ces données, puis enregistrer les résultats directement dans vos tables BigQuery.
Exemple de configuration :
models:
your_project_name:
submission_method: bigframes
packages: ["scikit-learn"]
Déploiement de dbt avec GitHub Actions et BigQuery
L’automatisation passe par la CI/CD (Continuous Integration/Continuous Development). Les pratiques de CI/CD permettent d’assurer que chaque modification du code est automatiquement testée, validée et déployée dès qu’elle est poussée par une branche spécifique du dépôt GitHub (en général, main ou prod). Dans le cas de dbt et de BigQuery, cela garantit que les modèles, tests et documentation sont à jour et que l’environnement de production reste stable et reproductible. La manière la plus courante d’implémenter ce processus est l’utilisation de GitHub Actions, l’outil d’automatisation natif de GitHub. Voici un exemple de workflow CI/CD à placer dans le fichier : .github/workflows/dbt.yml qui va exécuter vos commandes dbt à chaque push ou pull request vers la branche concernée. Ce workflow est compatible avec un projet dbt configuré pour BigQuery avec définition du service account (BQ_KEYFILE), de l’identifiant du projet (GCP_PROJECT_ID) et du dataset (DBT_DATASET) dans les secrets GitHub (Settings > Secrets and variables > Actions > Repository secrets).
name: Deploy dbt on BigQuery
env:
DBT_PROFILES_DIR: ${{ github.workspace }}/dbt_profiles
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
DBT_DATASET: ${{ secrets.DBT_DATASET }}
on:
push:
branches:
- main # Déploiement uniquement quand un push est fait sur la branche main
pull_request:
branches:
- main # Permet aussi d’exécuter les tests sur une PR avant merge
jobs:
dbt:
name: Run dbt commands
runs-on: ubuntu-latest
steps:
# Étape 1 : Cloner le dépôt
- name: Checkout repository
uses: actions/checkout@v4
# Étape 2 : Configurer Python
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.10"
# Étape 3 : Installer dbt + dépendances (modulable selon le projet)
- name: Install dbt dependencies
run: |
python -m pip install --upgrade pip
pip install dbt-bigquery
# Étape 4 : Ajouter la clé de service BigQuery (format JSON)
- name: Set up BigQuery service account credentials
run: |
mkdir -p $DBT_PROFILES_DIR
echo "${{ secrets.BQ_KEYFILE }}" > $DBT_PROFILES_DIR/keyfile.json
# Étape 5 : Exécuter dbt run et dbt test
- name: Run dbt commands
run: |
dbt deps --profiles-dir $DBT_PROFILES_DIR
dbt build --profiles-dir $DBT_PROFILES_DIR --target dev
Sécurité et gestion des accès
Pour garantir la sécurité de vos données, attribuez au compte de service utilisé par dbt uniquement les rôles nécessaires, tels que lecteur (roles/bigquery.dataViewer), éditeur (roles/bigquery.dataEditor) au lieu de Propriétaire, en fonction des besoins précis de votre projet.
Stockez systématiquement les identifiants sensibles (la clé JSON du service, l’ID du projet et le nom du dataset) dans les Secrets GitHub. Veillez à ne jamais versionner ces fichiers dans votre dépôt.
Appliquez le principe du moindre privilège en limitant l’accès aux secrets et aux environnements CI/CD, notamment en restreignant les droits des utilisateurs et en activant les audits d’accès.
Pensez également à révoquer ou renouveler régulièrement les clés inutilisées et à suivre les bonnes pratiques de gestion des accès sur Google Cloud Platform afin d’éviter toute fuite ou compromission.
Enfin, activez des alertes et des outils de monitoring pour détecter toute activité suspecte liée aux comptes de service ou aux pipelines CI/CD.
Testing et validation des données
dbt améliore la qualité des données via des tests automatisés directement au sein des fichiers de configuration YAML. Ces tests peuvent vérifier aussi bien des contraintes classiques (non-nullité et unicité pour les colonnes de clé primaire par exemple) que des tests personnalisés correspondant aux besoins métiers (chiffre d’affaires positif ou nul, par exemple). Ainsi, exemple, pour s’assurer que la colonne customer_id de la table customers contient uniquement des valeurs uniques et non nulles, vous écrivez simplement dans votre fichier .yml :
models:
- name: customers
columns:
- name: customer_id
tests:
- unique
- not_null
Ces tests sont ensuite lancés automatiquement via la commande dbt :
dbt test --target dev
Cela vous permet de valider la qualité de vos modèles à chaque étape du développement, d’identifier rapidement les anomalies ou les données manquantes et d’éviter la propagation d’erreurs dans vos rapports et analyses. Intégrés dans un pipeline CI/CD, ces tests garantissent que vos données restent fiables en production.
Publication de la documentation sur GitHub Pages
dbt permet de générer automatiquement une documentation complète et interactive de vos modèles, tests et sources via la commande :
dbt docs generate
Cette documentation est produite au format HTML et est stockée dans le dossier target/. Pour la visualiser localement, vous pouvez lancer la commande suivante qui ouvrira un serveur local affichant la documentation :
dbt docs serve
Pour partager cette documentation avec votre équipe ou vos clients, GitHub Pages est une solution simple et efficace. Voici comment automatiser la publication de la doc dbt sur GitHub Pages à chaque push dans votre dépôt :
1. Génération de la doc dans GitHub Actions
Ajoutez une étape dans votre workflow CI/CD pour générer la doc après avoir construit vos modèles
- name: Generate dbt docs
run: dbt docs generate --profiles-dir $DBT_PROFILES_DIR --target dev
2. Publication sur GitHub Pages
Utilisez une action GitHub dédiée pour déployer le contenu du dossier target/ sur la branche gh-pages (source GitHub Pages) :
- name: Deploy dbt docs to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./target
3. Configurer GitHub Pages
Dans les paramètres de votre dépôt GitHub, activez GitHub Pages en choisissant la branche gh-pages comme source. Vous obtiendrez une URL publique où la documentation sera accessible.
Ainsi, vous disposez d’une documentation toujours à jour, accessible simplement via un navigateur, ce qui facilite la communication et la transparence autour de vos pipelines dbt.
Conclusion
En combinant dbt, BigQuery et une intégration CI/CD bien pensée, vous disposez d’une infrastructure robuste et automatisée pour transformer, tester et déployer vos données avec fiabilité et rapidité. dbt vous permet centraliser la logique de transformation dans un code versionné et réutilisable. Il garantit aussi la qualité de vos données grâce à des tests automatisés intégrés.
Cette automatisation réduit les erreurs humaines, accélère la mise en production des modèles analytiques et facilite la collaboration entre équipes data et métiers. En sécurisant les accès via des comptes de service aux permissions limitées et en intégrant la gestion des secrets dans vos pipelines, vous protégez efficacement vos données sensibles tout en conservant une flexibilité maximale.
Enfin, la génération et la publication automatique de la documentation avec GitHub Pages assurent une transparence totale sur vos modèles et facilitent la communication autour de vos projets data.
Mettez dès aujourd’hui en place ces bonnes pratiques pour tirer pleinement parti de la puissance du cloud et de l’automatisation. Que vous soyez une startup ou une grande entreprise, cette approche agile vous permettra de gagner en confiance, en efficacité et en agilité dans la gestion de vos données.
Les derniers articles sur ce sujet


Tests de données automatisés DBT : Garantissez la qualité à chaque étape
