• nouveau

    Version 2026.06 - Intégrer la Data Observability au cœur de votre code

  • nouveau

    Contribuez à l'avenir de l'innovation en matière d'IA et de données

  • nouveau

    • Version 2026.06 - Intégrer la Data Observability au cœur de votre code

  • nouveau

    • Contribuez à l'avenir de l'innovation en matière d'IA et de données

Dbt Source Freshness : Éviter les données obsolètes en 2026

|

7

minute de lecture

Vous remarquez généralement que les données sont périmées lorsque quelqu'un d'autre le remarque en premier.

Un responsable financier vous contacte parce que les chiffres d'hier figurent toujours sur le tableau de bord d'aujourd'hui. L'orchestrateur affiche un signal vert. Les modèles d'outils d'ingénierie analytique dbt se construisent avec succès. Rien ne semble anormal jusqu'à ce que vous remontiez le problème vers la source et que vous réalisiez que la table d'origine ne reçoit plus de nouveaux enregistrements. C'est l'aspect inconfortable des problèmes de fraîcheur des données. Ils échouent souvent en silence.

Beaucoup d'équipes apprennent cette leçon de la même manière. Elles investissent dans les tests de transformation, la documentation et la traçabilité des données (lineage), mais elles n'ajoutent pas de vérification directe pour s'assurer que les données brutes arrivent toujours à temps. Si vous cherchez déjà à comprendre ce que signifient des données périmées en pratique, la fraîcheur des sources dbt (source freshness) est l'un des moyens les plus propres d'y remédier. Cela vous apporte une réponse opérationnelle simple à une question de grande valeur : cette source s'est-elle mise à jour quand elle était censée le faire ?

C'est important car les données périmées restent rarement isolées. Une ingestion retardée peut se propager dans les tableaux de bord de direction, les modèles de revenus, les fonctionnalités de machine learning et les rapports d'audit avant même que quiconque ne réalise que la source est ancienne. Si vous renforcez vos processus pour identifier les failles de fiabilité des données, les vérifications de fraîcheur doivent être placées en haut de votre liste. Elles ne remplacent pas les tests de qualité, mais elles détectent une catégorie de défaillances que les tests de schéma et de logique standard ignorent.

Table des matières

Le problème des données périmées

Les incidents de données les plus frustrants ne sont pas toujours les plus bruyants. Un travail peut se terminer avec succès, les journaux peuvent sembler normaux, et les modèles en aval peuvent tout de même se matérialiser à partir de données d'entrée obsolètes.

C'est pourquoi les données périmées nuisent si rapidement à la confiance. L'utilisateur métier ne se soucie pas de savoir si Airflow, Dagster ou dbt a techniquement « fonctionné ». Ce qui lui importe, c'est que la mesure sur le tableau de bord corresponde à la réalité. Si une source de paiements a cessé de se charger pendant la nuit, une exécution de transformation saine ne fait que republier une ancienne vérité.

Les pannes silencieuses sont les plus coûteuses

Une chaîne de défaillance classique ressemble à ceci :

  • Un extracteur en amont s'arrête. La table source conserve le dernier horodatage de la veille.

  • dbt continue d'exécuter les modèles en aval. Les transformations réussissent car la table existe et le schéma correspond toujours.

  • Les tableaux de bord se mettent à jour comme prévu. Les parties prenantes supposent que les données sont à jour parce que la couche de Business Intelligence (BI) s'est rafraîchie.

  • La confiance chute rapidement. Dès que quelqu'un repère l'anomalie, chaque chiffre à proximité de ce tableau de bord devient suspect.

C'est exactement ce problème que la fonctionnalité de fraîcheur des sources de dbt est conçue pour détecter. Elle vérifie si une source a été mise à jour assez récemment pour correspondre à la cadence que vous attendez.

Les problèmes de fraîcheur commencent rarement par un « mauvais SQL ». Ils commencent généralement par « les données ont cessé d'arriver et personne ne surveillait l'horloge ».

Pourquoi ce problème échappe aux équipes matures

Les équipes disposent souvent d'une couverture de tests solide pour les valeurs nulles, l'unicité, les relations et les valeurs acceptées. Ces vérifications sont importantes, mais elles répondent à des questions différentes. Une source peut passer tous les tests de qualité et rester pourtant périmée.

Cette distinction est cruciale pour les données opérationnelles. Les revenus, les paiements, les dépenses marketing, les inventaires, ainsi que les rapports cliniques ou soumis à des règles de Compliance dépendent tous de la ponctualité, et pas seulement de l'exactitude. Si la dernière ligne est obsolète, des tables en aval parfaitement modélisées raconteront quand même une histoire erronée.

La solution pratique est simple. Établissez un contrat de fraîcheur sur les sources de données brutes importantes, connectez le résultat à l'orchestration et arrêtez le pipeline lorsque la source a manqué sa fenêtre d'arrivée prévue. Cela transforme les données périmées, d'un ticket de support réactif, en un signal technique exploitable.

Comprendre la fraîcheur des sources dbt

La fraîcheur des sources dbt est une fonctionnalité intégrée qui permet de surveiller si les tables sources arrivent à temps. C'est une fonctionnalité essentielle de dbt depuis 2019, et elle fonctionne en comparant l'horodatage le plus récent d'un champ loaded_at_field à des seuils configurables warn_after (avertissement après) et error_after (erreur après). Si les données sont plus anciennes que la période autorisée, la commande dbt source freshness se termine par un code d'erreur, ce qui peut faire échouer les tâches d'intégration continue (CI) et bloquer le travail en aval, comme documenté dans les tests de source dbt.

A diagram explaining dbt Source Freshness, covering its definition, limitations, and key configuration components for data observability.

Si vous avez besoin d'une explication orientée métier de ce concept, ce guide sur la fraîcheur des données et son importance pour les décisions d'affaires est un complément utile aux détails de mise en œuvre.

Ce que c'est

La fraîcheur des sources dbt fonctionne comme un contrôle d'accord de niveau de service (SLA) pour l'arrivée des données brutes.

Vous définissez une source dans sources.yml, vous orientez dbt vers la colonne d'horodatage qui représente le moment où les enregistrements sont arrivés, et vous lui indiquez l'âge maximal que cette source peut atteindre avant de générer un avertissement ou une erreur. dbt interroge ensuite la valeur maximale de ce champ et la compare à l'heure actuelle.

Cela rend la fonctionnalité très efficace pour les sources ayant une cadence connue. Si une table de ventes doit être mise à jour quotidiennement, une erreur de fraîcheur vous indique que les données les plus récentes sont plus anciennes que la fenêtre acceptée.

Ce que ce n'est pas

La fraîcheur des sources dbt n'est pas un framework de qualité complet à elle seule.

Elle ne vous dit pas si les valeurs sont correctes, si une clé primaire est dupliquée, si une clé étrangère est toujours résolue, ni si la logique métier a changé en amont. Elle ne comprend pas non plus nativement les comportements d'arrivée complexes au-delà du seuil que vous définissez.

C'est pourquoi je la considère comme un détecteur de fumée, et non comme une enquête sur l'origine de l'incendie. Elle vous indique que le flux s'est peut-être arrêté. Elle n'explique pas toutes les raisons de cet arrêt.

Règle pratique : Utilisez les vérifications de fraîcheur pour la ponctualité, puis utilisez les tests dbt et d'autres outils de surveillance pour l'exactitude, l'exhaustivité et la dérive.

Les three pièces qui comptent le plus

Lorsque quelqu'un configure cela pour la première fois, je lui conseille de se concentrer sur trois décisions de configuration :

  1. Choisir le bon champ loaded_at_field
    Ce champ doit refléter l'arrivée des données ou la fraîcheur du chargement, et non un horodatage d'événement métier arbitraire.

  2. Définir des seuils réalistes
    Le seuil warn_after doit vous indiquer que la mise à jour de la source prend du retard. Le seuil error_after doit indiquer à votre pipeline de cesser de lui faire confiance.

  3. Choisir le bon périmètre
    Toutes les sources ne méritent pas le même niveau de surveillance. Commencez par les tables qui alimentent les tableaux de bord à haute visibilité, les rapports financiers ou les fonctionnalités de machine learning.

Maîtrisez ces trois aspects et la fraîcheur des sources dbt deviendra très rapidement utile sur le plan opérationnel.

Configurer les vérifications de fraîcheur dans votre projet

La configuration réside dans le fichier YAML de votre source. C'est une bonne nouvelle car cela maintient les règles de ponctualité proches des définitions de sources que votre équipe gère déjà.

La commande dbt source freshness s'appuie sur un bloc freshness dans le fichier YAML de la source, où vous définissez warn_after et error_after avec une période et une valeur, comme {count: 1, period: day}. Lors de son exécution, dbt compare la valeur maximale du champ loaded_at_field à l'heure actuelle et enregistre les résultats dans target/sources.json, ce qui facilite l'intégration de la sortie dans d'autres outils et visualisations, comme illustré dans la documentation de configuration de la fraîcheur dbt.

A dbt source configuration yaml file illustrating source freshness settings for user and order tables.

Un exemple YAML pratique

Voici un modèle propre que vous pouvez adapter :

version: 2

sources:
  - name: stripe
    schema: raw_stripe
    tables:
      - name: charges
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 30, period: minute}
          error_after: {count: 60, period: minute}

      - name: payouts
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 12, period: hour}
          error_after: {count: 24, period: hour}

  - name: salesforce
    schema: raw_salesforce
    tables:
      - name: opportunities
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 1, period: day}
          error_after: {count: 2, period: day}
version: 2

sources:
  - name: stripe
    schema: raw_stripe
    tables:
      - name: charges
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 30, period: minute}
          error_after: {count: 60, period: minute}

      - name: payouts
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 12, period: hour}
          error_after: {count: 24, period: hour}

  - name: salesforce
    schema: raw_salesforce
    tables:
      - name: opportunities
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 1, period: day}
          error_after: {count: 2, period: day}
version: 2

sources:
  - name: stripe
    schema: raw_stripe
    tables:
      - name: charges
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 30, period: minute}
          error_after: {count: 60, period: minute}

      - name: payouts
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 12, period: hour}
          error_after: {count: 24, period: hour}

  - name: salesforce
    schema: raw_salesforce
    tables:
      - name: opportunities
        loaded_at_field: _etl_loaded_at
        freshness:
          warn_after: {count: 1, period: day}
          error_after: {count: 2, period: day}

Cet exemple accomplit trois choses très utiles :

  • Il utilise une convention d'horodatage de chargement unique. Le champ _etl_loaded_at est explicite et facile à standardiser sur tous les outils d'ingestion.

  • Il définit des seuils différents par table. Les transactions (charges) et les versements (payouts) n'ont pas le même profil d'arrivée, ils ne doivent donc pas partager la même règle de fraîcheur.

  • Il conserve des règles lisibles. Toute personne examinant le projet peut comprendre les attentes opérationnelles sans avoir à lire de documentation externe.

Comment choisir les seuils

L'erreur que je vois le plus souvent consiste à copier les mêmes valeurs partout. Les seuils de fraîcheur doivent refléter le comportement réel d'ingestion et la tolérance de l'entreprise.

Profil de la source

Bon seuil d'avertissement

Bon seuil d'erreur

Pourquoi

Flux d'événements en quasi-temps réel

30 minutes

60 minutes

Vous donne une marge pour les légères variations d'ingestion (jitter) sans ignorer une véritable panne

Flux de traitement par lots horaire

30 minutes après le délai attendu

1 heure après le délai attendu

Détecte le retard avant que les tableaux de bord ne soient visiblement obsolètes

Exportation quotidienne de système métier

1 jour

2 jours

Utile lorsque la source se met à jour une fois par cycle d'activité

Données de référence de faible priorité

Qualitatif, selon l'usage

Qualitatif, selon l'usage

Certaines dimensions ne nécessitent pas d'alertes agressives

Utilisez ce tableau comme une aide à la décision, et non comme un modèle à appliquer aveuglément.

Ce qui fonctionne dans les projets réels

Quelques habitudes rendent la configuration plus fluide :

  • Privilégiez les horodatages d'ingestion aux horodatages métiers. Le champ created_at décrit le moment où un client a agi. Il ne décrit pas toujours le moment où la ligne est arrivée dans votre entrepôt de données.

  • Gardez la fraîcheur proche de la responsabilité des équipes. Si une équipe possède une source, assurez-vous qu'elle est d'accord avec les seuils définis lors de la revue de code.

  • Documentez les exceptions. Certaines sources arrivent tardivement par conception le week-end, en fin de mois ou après le traitement d'un fournisseur externe.

Si vous commencez par vos sources brutes les plus importantes et définissez correctement ces règles, le premier déploiement de la fraîcheur des sources dbt demande généralement moins d'efforts que le débogage qu'il évitera par la suite.

Exécuter les vérifications et interpréter les résultats

Une fois le fichier YAML en place, vous pouvez lancer la vérification à l'aide de la commande que votre équipe utilisera constamment :

dbt source freshness

Vous n'avez pas besoin de l'exécuter sur l'ensemble de votre projet à chaque fois. dbt prend également en charge l'exécution spécifique à un nœud, comme dbt source freshness --select source:stripe.charges, ce qui s'avère très utile lorsque vous déboguez une table instable ou validez une modification sans subir la lenteur d'un contrôle complet à l'échelle du projet.

A digital display showing a dbt source freshness check result with all data sources marked as fresh.

Ce que signifient les statuts

Le résultat est simple, ce qui explique en partie pourquoi il s'intègre si bien dans la CI et l'orchestration :

  • PASS signifie que l'horodatage le plus récent se situe dans votre seuil acceptable.

  • WARN signifie que la source est plus ancienne que warn_after, mais n'a pas encore dépassé error_after.

  • ERROR signifie que la source a franchi le seuil de défaillance et doit être considérée comme périmée.

Cet état d'avertissement (WARN) est très utile sur le plan opérationnel. Il vous donne un signal précoce qu'une source commence à prendre du retard, tout en vous laissant décider d'interrompre ou non les tâches dépendantes.

Pourquoi le code de sortie est important

Le code de sortie de la commande est ce qui transforme la fraîcheur d'un simple tableau de bord en un véritable point de contrôle.

Si une source échoue au test de fraîcheur, dbt renvoie un code de sortie non nul. Cela permet à GitHub Actions, GitLab CI, Airflow, Dagster ou aux tâches dbt Cloud d'arrêter automatiquement l'exécution en aval. En pratique, cela signifie que vous pouvez empêcher la propagation de données sources périmées dans vos tables intermédiaires (marts), tableaux de bord et exportations.

Un contrôle de fraîcheur qui écrit simplement dans un journal relève de l'Observability. Un contrôle de fraîcheur qui bloque les exécutions défaillantes en aval est un mécanisme de contrôle opérationnel.

Stratégie de planification

Une règle pratique issue des conseils de Secoda sur la fraîcheur des sources dbt consiste à exécuter les vérifications au moins deux fois plus fréquemment que la cadence d'arrivée prévue des données. Leur exemple est d'effectuer un contrôle toutes les 30 minutes pour des chargements horaires. Cela vous offre une couverture suffisante pour détecter une mise à jour manquée avant que les données périmées ne deviennent visibles en aval.

Un bon flux de travail léger ressemble à ceci :

  1. Exécutez le contrôle de fraîcheur avant les tâches de transformation pour les sources critiques.

  2. Échouez rapidement en cas d'erreur (fail fast) afin que les données d'entrée périmées n'alimentent pas les modèles de confiance.

  3. Redirigez les résultats WARN vers des alertes pour que les ingénieurs puissent investiguer rapidement.

  4. Utilisez des exécutions sélectives en développement lorsque vous testez une seule source ou un seul chemin d'ingestion.

C'est l'un de ces contrôles qui demande peu de code mais qui a un impact considérable.

Pièges courants et techniques avancées

La plupart des configurations de fraîcheur de sources dbt échouent pour des raisons banales, et non complexes. La commande fonctionne. La configuration est valide. Mais le résultat opérationnel est bruyant, lent ou trompeur.

Le piège le plus important consiste à supposer que n'importe quelle colonne d'horodatage fera l'affaire. Ce n'est pas le cas.

An infographic titled Common Pitfalls and Advanced Techniques for managing dbt source freshness in data engineering.

Les modes de défaillance qui apparaissent en premier

Un résumé utile des notes de mise en œuvre avancée de la fraîcheur dbt met en évidence trois problèmes courants. Les colonnes d'horodatage non indexées peuvent augmenter la latence des requêtes de 40 à 60 %, les écarts de fuseaux horaires can causer de fausses alertes, et l'omission d'un filter sur les grandes tables peut entraîner une augmentation de 25 % des données périmées non détectées.

Ce ne sont pas des cas marginaux théoriques. Ils se manifestent rapidement en production.

  • Mauvaise sémantique de l'horodatage
    Si le champ loaded_at_field pointe vers l'horodatage d'un événement métier au lieu de l'horodatage d'arrivée dans l'entrepôt, dbt peut signaler qu'une table est fraîche alors même que l'ingestion est en retard.

  • Confusion de fuseaux horaires
    Si vos enregistrements sont stockés en UTC mais que votre logique de comparaison s'exécute par rapport à l'heure locale du système, vous risquez de créer de fausses alertes qui inciteront l'équipe à ignorer les alertes de fraîcheur.

  • Analyses lourdes sur les tables historiques
    Sur les grandes tables brutes, une requête de fraîcheur sans filtre utile peut gaspiller des ressources de calcul tout en passant à côté de l'état opérationnel actuel qui vous intéresse.

Ce qu'il faut changer lorsque les bases sont stables

Une fois que les vérifications de base sont fiables, vous pouvez utiliser dbt de manière plus sélective.

Un modèle utile consiste à ne construire qu'à partir de sources récemment mises à jour. Le sélecteur source_status:fresher+ aide à déclencher les modèles en aval à partir des sources qui ont changé, ce qui convient particulièrement bien lorsque votre projet contient un mélange de systèmes amont à haute et basse fréquence.

Ne considérez pas chaque contrôle de fraîcheur comme une alarme binaire. Certains doivent servir de règles restrictives. D'autres doivent servir de règles d'aiguillage pour des constructions sélectives.

Une liste de contrôle pratique pour renforcer le système

Lorsqu'une équipe me demande d'analyser sa configuration, je vérifie généralement ces points en priorité :

  • Indexez ou optimisez le chemin de l'horodatage là où votre entrepôt de données le permet, en particulier sur les grandes tables sources.

  • Standardisez sur le format UTC pour les horodatages de chargement stockés, puis gardez un comportement de comparaison explicite.

  • Ajoutez un filter pour les très grandes tables d'historique afin que dbt évalue la fenêtre opérationnelle récente plutôt que de scanner tout l'historique inutilement.

  • Ajustez les seuils après avoir observé le comportement réel d'arrivée au lieu de les figer dès le premier jour.

  • Séparez les sources critiques des sources non critiques pour qu'un flux instable et de faible valeur ne bloque pas vos livraisons de confiance partout.

Il est facile d'activer la fraîcheur des sources dbt. La rendre fiable demande un peu plus de jugement technique.

Au-delà de la fraîcheur : bâtir un flux de travail complet d'Observability

Les seuils statiques de fraîcheur résolvent un problème important, mais ils ne couvrent pas l'intégralité du problème de la ponctualité des données.

Une source peut arriver « à temps » selon le seuil error_after tout en étant suffisamment en retard pour perturber les analystes, les rapports de direction ou la génération de fonctionnalités en aval. Cet écart devient plus évident dans les systèmes de production réels où les retards ne sont pas répartis de manière uniforme. L'intervalle moyen peut sembler correct, alors que des ralentissements rares mais graves continuent de survenir exactement au mauvais moment.

Une recherche résumée dans les meilleures pratiques de fraîcheur de sources de Paradime met directement le doigt sur ce problème sous-estimé : 70 % des incidents de données périmées proviennent de retards dépassant de 3 fois l'intervalle moyen, c'est pourquoi la définition de seuils basés sur la moyenne ou même sur des percentiles peut passer à côté d'événements de retard extrêmes importants.

Screenshot from https://digna.ai

Là où dbt s'arrête

La fraîcheur des sources dbt pose une question directe : l'horodatage le plus récent est-il plus ancien que le seuil défini ?

C'est utile, mais limité. Cela ne vous dira pas seul si un flux qui arrive habituellement à une heure prévisible a tendance à prendre du retard aujourd'hui, si les retards s'aggravent avec le temps, ou si une source est toujours techniquement « fraîche » tout en violant déjà les attentes des utilisateurs métier.

C'est ici qu'une Observability plus large entre en jeu. Vous ne testez plus seulement l'obsolescence. Vous surveillez le comportement de ponctualité.

Ce que les équipes matures ajoutent ensuite

Les équipes évoluent généralement dans trois directions :

  1. Surveillance de la ponctualité
    Elles suivent le moment où les données sont attendues, et pas seulement si elles sont actuellement périmées.

  2. Apprentissage des profils d'arrivée
    Elles comparent l'arrivée d'aujourd'hui aux normes historiques au lieu de s'appuyer uniquement sur des seuils fixes.

  3. Réponse intégrée
    Elles connectent les signaux d'anomalies, de schéma, de fraîcheur et de validation pour que la résolution d'incidents commence avec tout le contexte nécessaire.

Un exemple est constitué par les flux de travail de Data Observability articulés autour d'une surveillance directement dans la base de données. La capacité vérifiée qui compte ici est que le composant de ponctualité de digna surveille l'arrivée des données par rapport aux profils appris et aux calendriers des utilisateurs, et il exécute les analyses à l'intérieur de la base de données du client plutôt que par des interrogations externes, comme décrit dans la présentation de la ponctualité de digna. Cela en fait une couche différente de la vérification de seuil statique de dbt, et non un remplacement de celle-ci.

Un modèle de maturité pratique

La progression ressemble généralement à ceci :

Étape

Ce que vous surveillez

Limitation principale

De base

Seuils de sources statiques dans dbt

Manque les dérives d'arrivée subtiles

Contrôlé

Fraîcheur dbt liée à la CI et à l'orchestration

Reste principalement réactif

Mature

Profils de ponctualité, retards et comportements de livraison attendus

Nécessite une conception d'Observability plus large

Le modèle mental utile est simple. La fraîcheur des sources dbt vous indique quand une source est périmée. La surveillance de la ponctualité vous aide à détecter quand elle commence à prendre du retard.

Cette différence est cruciale dans les environnements où un seul chargement manqué ou retardé a un impact démesuré, en particulier lorsque les retards extrêmes sont assez rares pour échapper aux seuils simplistes mais assez fréquents pour briser kontinuellement la confiance.

Si votre équipe utilise déjà la fraîcheur des sources dbt et souhaite une visibilité plus large sur les arrivées tardives, la validation au niveau des enregistrements et les flux d'Observability intégrés à la base de données, digna est une option à évaluer en parallèle de vos outils existants.

Partager sur X
Partager sur X
Partager sur Facebook
Partager sur Facebook
Partager sur LinkedIn
Partager sur LinkedIn

Rencontrez l'équipe derrière la plateforme

Une équipe basée à Vienne d'experts en IA, données et logiciels soutenue

par la rigueur académique et l'expérience en entreprise.

Rencontrez l'équipe derrière la plateforme

Une équipe basée à Vienne d'experts en IA, données et logiciels soutenue
par la rigueur académique et l'expérience en entreprise.

Produit

Intégrations

Ressources

Société