Cursus
dbt (data build tool) est un outil performant utilisé par les analystes et ingénieurs de données pour transformer, tester et documenter les données dans la pile de données moderne.
Bien qu'il soit largement reconnu pour ses capacités de modélisation, une autre fonctionnalité essentielle est dbt snapshot, qui vous permet de capturer les dimensions à évolution lente (SCD) dans votre entrepôt de données.
Ce tutoriel vous fournira une explication détaillée des instantanés dbt, de leurs cas d'utilisation et de leur mise en œuvre. Je vais :
- Définissez ce que sont les instantanés dbt.
- Veuillez expliquer quand et pourquoi utiliser des instantanés.
- Mettez en œuvre un instantané étape par étape.
- Visualisez les données instantanées.
- Veuillez partager vos meilleures pratiques et les défis rencontrés.
Pour en savoir plus sur le dbt, veuillez consulter notre guide « Qu'est-ce que le dbt ? » à l'adresse . Introduction pratique pour les ingénieurs de données et notre cours Introduction à dbt.
Que sont les instantanés dbt ?
Un instantané dbt est un mécanisme permettant de suivre les modifications apportées aux enregistrements au fil du temps, en particulier pour les tableaux dont les modifications historiques ne sont pas conservées par défaut. Les instantanés sont principalement utilisés pour implémenter les dimensions à évolution lente (SCD) de type 2. Ils stockent les versions des lignes lorsque les colonnes suivies changent.
Les cas d'utilisation incluent :
- Suivi des changements dans les profils des clients au fil du temps.
- Surveillance des changements d'état des données opérationnelles.
- Enregistrement de l'évolution des attributs dimensionnels pour des rapports historiques précis.
Pourquoi utiliser les instantanés dbt ? Avantages et cas d'utilisation
Les instantanés dbt sont précieux car ils servent à enregistrer les modifications apportées aux données au fil du temps, ce qui facilite l'analyse historique et la création de rapports de conformité.
Avantages
Voici quelques avantages dont vous bénéficierez en utilisant les instantanés :
- Analyse des tendances: Comprenez comment le comportement, les caractéristiques ou le statut des clients évoluent.
- Audit et conformité: Présentez les données historiques aux auditeurs ou aux organismes de réglementation.
- Débogage des pipelines de données: Identifiez les modifications inattendues apportées à un enregistrement afin de résoudre les problèmes.
Cas d'utilisation courants
Les instantanés peuvent s'avérer utiles dans certaines situations particulières, telles que :
- Suivi des mises à niveau des adhésions aux programmes de fidélité.
- Enregistrement de l'historique des prix des produits dans le commerce de détail.
- Enregistrement des changements de service des employés dans les systèmes RH.
Fondements architecturaux
Les instantanés s'intègrent parfaitement à l'écosystème dbt, tirant parti de sa configuration et de sa gestion des exécutions pour créer efficacement des tableaux historiques.
Examinons les types de modèles utilisés dans les données à titre d'exemple.
Deux modèles sont utilisés pour les données :
- Modèles standard: Transformez les données pour créer des tableaux représentant l'état actuel.
- Modèles instantanés: Créez des tableaux versionnés pour suivre l'historique des modifications.
Ces deux modèles diffèrent par leur objectif, leurs méthodes de stockage et leurs applications.
Voici un résumé de leurs différences :
|
Caractéristique |
Modèles standard |
Instantanés |
|
Objectif |
Transformations de l'état actuel |
Historique du cursus |
|
Stockage |
Tableau ou vue avec les données actuelles |
Tableau d'historique en mode ajout uniquement |
|
Idéal pour |
Modèles factuels/dimensionnels |
Dimensions changeant lentement |
Fonctionnement des instantanés dbt
Les instantanés suivent généralement un flux de travail structuré qui garantit que toutes les modifications sont enregistrées de manière systématique, en suivant les étapes suivantes :
- s de configuration: Définissez la stratégie de capture instantanée, les clés uniques et les colonnes de détection des modifications.
- d'exécution: Exécutez «
dbt snapshot» pour comparer les données actuelles aux instantanés existants. - Stockage: dbt insère de nouveaux enregistrements pour les modifications détectées, en mettant à jour les horodatages de validité.
Cependant, comment les modifications sont-elles suivies dans dbt ?
Toutes les modifications sont enregistrées dans le tableau Instantané de sortie.
Si une modification est détectée, dbt met à jour le champ « dbt_valid_to » (horodatage de la dernière modification) de la version précédente avec l'horodatage actuel et insère une nouvelle ligne avec le champ « dbt_valid_from » (horodatage de la dernière modification) comme horodatage actuel.
Stratégies instantanées dans dbt
Les instantanés utilisent deux stratégies principales pour détecter les modifications.
1. Stratégie d'horodatage
- Définition d': Utilise un champ horodaté pour détecter les modifications.
- Quand utiliser l': Le tableau source contient des horodatages fiables pour l'
updated_at.
2. Vérifier la stratégie
- Définition d': Compare directement les colonnes spécifiées.
- Quand utiliser l': Le tableau source ne comporte pas d'horodatage fiable, mais les modifications d'attributs doivent être suivies.
|
Stratégie |
Méthode de détection |
Idéal pour |
|
Horodatage |
Colonne « timestamp » mise à jour |
Tableaux avec horodatage fiable de la dernière modification |
|
Veuillez vérifier. |
Comparaison directe des colonnes |
Tableaux sans colonnes d'horodatage |
Suppressions définitives
Les modifications apportées aux données, telles que les suppressions, peuvent également être suivies, mais pas par défaut. Cependant, il existe un moyen de modifier cela afin de surveiller ces modifications définitives.
- du problème: Les instantanés ne suivent pas les lignes supprimées par défaut.
- s de la solution: Définissez l'
invalidate_hard_deletes=Truepour marquer les lignes supprimées avec une valeur d'dbt_valid_to, en conservant leur dernier état.
Voici un exemple de stratégie de vérification mise en œuvre, tenant compte des suppressions définitives :
{%
snapshot customers_snapshot %}
{%
set config(
target_schema='snapshots',
unique_key='customer_id',
strategy='check',
check_cols=['tier'],
invalidate_hard_deletes=True
)
%}
SELECT * FROM {{ source('customers') }}
{% endsnapshot %}
Guide de mise en œuvre des instantanés dbt
Maintenant que nous comprenons le fonctionnement des instantanés dbt, examinons comment les mettre en œuvre.
1. Exemple de jeu de données pour le tutoriel Snapshot
Pour vous exercer à créer des instantanés, nous allons créer un exemple de tableau clients qui imite un système d'adhésion réel. Cela nous fournit des données concrètes pour tester des stratégies courantes de capture instantanée.
import csv
from datetime import datetime
# Define the data
customers_data = [
["customer_id", "name", "tier", "updated_at"], # header row
[1, "Alice Tan", "Silver", "2025-07-01 10:00:00"],
[2, "Bob Lee", "Gold", "2025-07-01 10:00:00"],
[3, "Cheryl Lim", "Silver", "2025-07-01 10:00:00"]
]
# Write data to customers.csv
with open("customers.csv", mode="w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerows(customers_data)
2. Configuration de votre projet dbt
Avant de pouvoir mettre en œuvre les instantanés, il est essentiel de configurer correctement votre projet dbt. Cela garantit que votre environnement est configuré pour gérer les modèles, les instantanés, les tests et la documentation de manière structurée et évolutive.
Conditions préalables
- Veuillez vous assurer que Python 3.7+ est installé.
- Veuillez installer dbt à l'aide de pip :
pip install dbt
Veuillez remplacer dbt-postgres par votre adaptateur d'entrepôt, par exemple dbt-snowflake ou dbt-bigquery, en fonction de votre environnement.
Instructions de configuration étape par étape
1. Veuillez vous rendre dans le répertoire de vos projets.
C'est ici que vous stockerez vos projets d'analyse ou ELT. Dans ce cas, nous stockerons tous les fichiers associés dans ce dossier de projet dbt.
cd ~/dbt-snapshot-project
2. Veuillez initialiser un nouveau projet dbt.
Créez un fichier de configuration nommé dbt_project.yml :
Veuillez coller le texte suivant dans votre fichier de projet :
name: dbt_snapshots_project
version: '1.0'
profile: austinchia
seeds:
dbt_snapshots_project:
+quote_columns: false
3. Veuillez vérifier votre connexion.
dbt debug
Voici ce que devrait afficher la commande :

4. Veuillez enregistrer les semences dans une base de données locale.
Veuillez exécuter la commande suivante :
dbt seed
Voici ce que devrait afficher la commande :

5. Veuillez configurer les paramètres de connexion à votre base de données.
Dans le fichier profiles.yml, généralement situé dans ~/.dbt/profiles.yml.
Voici le contenu de mon fichier de profils :
austinchia:
target: dev
outputs:
dev:
type: sqlite
threads: 1
database: ./dbt_snapshots_project.db
schema: main
schema_directory: ./schemas
schemas_and_paths:
main: ./dbt_snapshots_project.db
extensions:
- "C:/sqlean/crypto.dll"
Si vous utilisez une base de données SQLite comme moi, vous devrez installer le extension SQLean également.
6. Intégrez vos données dans les modèles de staging dbt :
Veuillez créer un nouveau dossier nommé « models ». Dans ce dossier, veuillez créer un fichier nommé « stg_customers.sql ».
Veuillez coller le code suivant dans le fichier :
SELECT
*
FROM {{ ref('customers') }}
7. Créez des modèles de staging à l'aide de la commande suivante dans dbt.
dbt run --select stg_customers
Voici ce que devrait afficher la commande :

3. Configuration de l'instantané dbt
- Veuillez créer un répertoire nommé « snapshots ».
- Veuillez rédiger votre fichier SQL instantané avec la configuration appropriée.
Dans cet exemple, vous pouvez utiliser le code suivant pour effectuer un instantané de stratégie d'horodatage.
{% snapshot customers_snapshot %}
{{
config(
target_schema='snapshots',
unique_key='customer_id',
strategy='timestamp',
updated_at='updated_at'
)
}}
select * from {{ ref('customers') }}
{% endsnapshot %}
4. Exécution de dbt Snapshot
Exécuter :
dbt snapshot
Dans cette commande, dbt crée le tableau instantané s'il n'existe pas. Il insère également de nouvelles lignes pour les modifications détectées.
Voici ce que devrait afficher la commande :

5. Vérification des tableaux instantanés
Maintenant que vous avez effectué votre instantané, vous devriez obtenir un nouveau fichier snapshot.db créé dans le répertoire de fichiers de votre projet.
J'ai ouvert ce fichier dans VSCode pour voir à quoi il ressemble :

Comme vous pouvez le constater, il contient des colonnes supplémentaires telles que « dbt_updated_at » (nom du fichier), etc. Ces informations sont essentielles pour déterminer si des modifications ont été apportées aux données et à quel moment elles ont été effectuées.
Pour obtenir des guides pratiques supplémentaires sur dbt, veuillez consulter notre guide Semantic Layer avec dbt..
Exemple : Suivi des modifications des données avec les instantanés dbt
Les instantanés permettent aux équipes de capturer une piste d'audit complète des modifications apportées à n'importe quel attribut d'un tableau au fil du temps, ce qui les rend très utiles pour la conformité, le débogage et l'analyse.
- Créez un exemple de tableau d'
customerss avec les champs pertinents. Cela inclut l'identifiant client, le nom, l'adresse e-mail et l'horodatage updated_at pour suivre les modifications apportées.
CREATE TABLE customers (
customer_id INTEGER PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
updated_at TIMESTAMP
);
- Veuillez saisir les données initiales afin de simuler un état de référence.
Veuillez utiliser le code suivant pour insérer des données dans le tableau. Ces données seront utilisées pour les données d'origine avant la modification.
INSERT INTO customers VALUES
(1, 'Alice Tan', 'alice@example.com', '2025-07-01 10:00:00'),
(2, 'Bob Lee', 'bob.lee@example.com', '2025-07-01 10:00:00');
- Écrivez une configuration d'instantané dbt pour suivre les modifications apportées aux e-mails :
{% snapshot customers_email_snapshot %}
{%
set config(
target_schema='snapshots',
unique_key='customer_id',
strategy='check',
check_cols=['email'],
invalidate_hard_deletes=True
)
%}
SELECT * FROM {{ source('customers') }}
{% endsnapshot %}
- Veuillez exécuter l'
dbt snapshotpour enregistrer l'état initial.
dbt snapshot
- Simulez une mise à jour par e-mail dans le tableau source.
Ensuite, nous mettrons à jour notre tableau initial en modifiant les informations d'un client afin de simuler une modification des données.
UPDATE customers
SET email = 'alice.tan@example.com', updated_at = '2025-07-02 09:00:00'
WHERE customer_id = 1;
- Veuillez relancer l'
dbt snapshotpour enregistrer la modification.
dbt snapshot
- Interrogez le tableau instantané.
Pour afficher les différences et les modifications apportées aux données, vous devez interroger le tableau instantané. Le tableau doit indiquer les deux versions de l'adresse électronique avec leurs périodes de validité respectives :
SELECT customer_id, email, dbt_valid_from, dbt_valid_to
FROM snapshots.customers_email_snapshot
ORDER BY customer_id, dbt_valid_from;
Ce processus vous garantit de conserver un historique complet des modifications apportées aux mises à jour par e-mail, ce qui est essentiel pour les audits RGPD, le suivi de l'historique des contacts ou l'analyse du service client.
Configuration et gestion avancées
Une gestion efficace de la configuration permet aux équipes de déployer facilement des implémentations instantanées à travers différents projets et environnements.
1. Configuration au niveau du projet et au niveau des ressources
- Configuration au niveau du projet : Veuillez utiliser
dbt_project.ymlpour définir les configurations par défaut des instantanés, telles que le schéma cible ou les matérialisations, applicables à tous les instantanés. - Configuration au niveau des ressources : Remplacez les paramètres dans les fichiers SQL individuels des instantanés pour répondre à des exigences spécifiques, garantissant ainsi une grande flexibilité.
2. Personnalisation des champs de métadonnées
Par défaut, dbt crée les champs « dbt_valid_from » et « dbt_valid_to ». Vous pouvez renommer ces éléments à l'aide des options de configuration « valid_from » et « valid_to » si les normes de votre équipe exigent des conventions de dénomination différentes pour plus de clarté dans les outils de BI ou de gouvernance des données.
3. Migration des configurations Snapshot existantes
Les migrations peuvent entraîner certaines incohérences si elles ne sont pas gérées correctement. Voici quelques points à prendre en compte lors de la migration de vos configurations de clichés instantanés :
- Identifier les définitions d'instantanés héritées à l'aide de styles de blocs de configuration obsolètes.
- Refactoriser vers des configurations basées sur YAML si vous utilisez des versions récentes de dbt, afin d'assurer la cohérence.
- Vérifier l'exactitude :
- Exécutez des instantanés sur des environnements de test.
- Veuillez comparer les résultats avant de désactiver les instantanés existants.
- Mise hors service : Veuillez supprimer les anciens fichiers instantanés et mettre à jour la documentation en conséquence.
4. Intégration avec d'autres outils
Les modifications apportées aux données peuvent être suivies à l'aide des instantanés dbt.
Par exemple :
- Outils BI (par exemple, Power BI, Tableau) : Créez des visualisations temporelles illustrant les changements d'attributs au fil du temps.
- Plateformes d'observabilité (par exemple, Monte Carlo, Datafold) : Surveillez la fraîcheur des données et l'intégrité historique.
- Catalogues de données (par exemple, Alation, Collibra) : Incluez des tableaux récapitulatifs de l'historique des instantanés en tant qu'artefacts de traçabilité documentés à des fins de
Meilleures pratiques pour la mise en œuvre en production
La mise en œuvre des instantanés dbt en production nécessite une conception réfléchie afin de garantir les performances, la maintenabilité et la valeur commerciale.
Il est recommandé de suivre ces conseils :
1. Cas d'utilisation optimale et sélection des tableaux
- Donnez la priorité aux tableaux de dimensions contenant des attributs qui changent rarement, tels que les profils clients, les données de base produit et les contrats fournisseurs.
- Évitez les tableaux transactionnels (par exemple, les lignes de commande) avec des insertions et des mises à jour fréquentes, sauf si cela est nécessaire en raison d'une croissance rapide du stockage.
2. Techniques d'optimisation des performances
En production, vous souhaiterez optimiser vos données afin que les modifications puissent être suivies efficacement sans affecter votre produit.
Voici quelques conseils :
- Indexation : Veuillez ajouter des index aux colonnes «
unique_key» et « validity » afin d'accélérer les requêtes. - Partitionnement : Veuillez partitionner les tableaux de clichés instantanés par date afin d'optimiser les performances d'analyse.
- Regroupement (spécifique à l'entrepôt) : Utilisez des clés de regroupement (par exemple dans BigQuery) sur les champs à cardinalité élevée afin d'améliorer la vitesse des requêtes de filtrage.
3. Pratiques d'entretien et de surveillance
- Planification : Exécutez les instantanés pendant les heures creuses afin de minimiser l'impact sur les coûts informatiques.
- Surveillance : Configurez des alertes pour les échecs de snapshots dans dbt Cloud ou votre outil d'orchestration.
- Vérification de la fraîcheur des données : Veuillez utiliser les tests dbt ou des outils d'observabilité pour vérifier la fraîcheur des données des instantanés.
- Analyse du stockage : Vérifiez régulièrement la taille des tableaux instantanés et supprimez les données historiques si l'activité le permet.
4. Erreurs courantes
L'utilisation d'un identifiant unique ( unique_key ) entraîne une version incorrecte des lignes. Veuillez toujours tester la logique d'unicité avant le déploiement.
La surcharge des instantanés peut également se produire lorsque stocker des modifications historiques inutiles (par exemple, des colonnes avec des mises à jour fréquentes de l'horodatage) peut augmenter rapidement les coûts de stockage.
Défis courants et solutions
L'utilisation des instantanés dans dbt peut présenter certaines difficultés techniques spécifiques :
1. Collisions de clés uniques
Problème : Lignes en double dans l'instantané en raison de clés uniques mal définies.
Solution :
- Vérifiez l'unicité à l'aide des tests dbt avant le déploiement du snapshot.
- Concaténez plusieurs champs pour garantir l'unicité des composites lorsque cela est nécessaire.
2. Performances des requêtes temporelles
Problème : Les requêtes sont lentes lors de l'analyse des données historiques.
Solution :
- Utilisez efficacement le partitionnement et le regroupement des entrepôts.
- Veuillez toujours filtrer les requêtes par «
dbt_valid_from» ou par plage de dates afin de réduire le volume de données analysées.
3. Dépannage des erreurs d'exécution des instantanés
Les problèmes courants incluent :
- Schéma incorrect ou autorisations de base de données incorrectes.
- Les modifications apportées au schéma du tableau source (par exemple, suppression de colonnes) interrompent les instructions d'
SELECTde l'instantané. - Erreurs de syntaxe dans les blocs de configuration des instantanés.
Solutions :
- Veuillez utiliser
dbt debugpour vérifier la connexion et la configuration. - Mettre en œuvre des tests d'intégration continue dans dbt afin de détecter les erreurs avant le déploiement.
- Veuillez consulter les journaux d'exécution dbt pour obtenir des messages d'erreur détaillés.
Conclusion
Les instantanés dbt permettent aux équipes d'analyse de créer des ensembles de données historiques robustes avec un minimum de frais d'ingénierie, ce qui facilite l'analyse de la conformité. Si vous souhaitez en savoir plus sur la TCD, notre cours sur l'Introduction à la TCD. Pour plus d'informations et d'autres guides, veuillez consulter notre Introduction au package dbt-utils et tutoriel dbt.
FAQ sur les instantanés dbt
Comment configurer les instantanés dbt pour différentes stratégies de données ?
Pour configurer les instantanés dbt pour différentes stratégies de données, veuillez choisir entre les stratégies d'horodatage et de vérification dans votre configuration d'instantanés. Pour la stratégie d'horodatage, veuillez spécifier strategy='timestamp' et fournir une colonne updated_at qui se met à jour de manière fiable à chaque modification. Pour la stratégie de vérification, veuillez utiliser strategy='check' et définir check_cols avec la liste des colonnes à surveiller pour détecter les modifications.
Quelles sont les meilleures pratiques pour planifier des instantanés dbt ?
Planifiez des instantanés pendant les heures creuses, alignez leur fréquence sur les taux de modification des données, utilisez des orchestrateurs tels qu'Airflow ou dbt Cloud, exécutez-les séparément des transformations lourdes et surveillez régulièrement les erreurs.
Comment puis-je personnaliser les champs de métadonnées dans les instantanés dbt ?
Vous pouvez renommer les champs de métadonnées par défaut tels que dbt_valid_from et dbt_valid_to dans la configuration de l'instantané et ajouter des métadonnées personnalisées à l'aide de la configuration meta dans votre fichier YAML afin de vous conformer à vos normes en matière de données.
Quelles sont les différences entre les stratégies d'horodatage et de vérification dans les instantanés dbt ?
Timestamp utilise une colonne updated_at pour détecter toute modification, tandis que check compare des colonnes spécifiques pour détecter les différences. Timestamp est plus simple, tandis que check offre plus de contrôle lorsqu'il n'existe pas de timestamp fiable.
Comment gérer les enregistrements supprimés dans les instantanés dbt ?
Veuillez utiliser invalidate_hard_deletes=True afin que dbt marque les enregistrements manquants avec une date de fin dans leur période de validité, capturant ainsi efficacement les suppressions dans l'historique de vos instantanés.

Je m'appelle Austin, je suis blogueur et rédacteur technique et j'ai des années d'expérience en tant que data scientist et data analyst dans le domaine de la santé. J'ai commencé mon parcours technologique avec une formation en biologie et j'aide maintenant les autres à faire la même transition grâce à mon blog technologique. Ma passion pour la technologie m'a conduit à écrire pour des dizaines d'entreprises SaaS, inspirant les autres et partageant mes expériences.