Freshness checks — Vérification de la fraîcheur des données
Les freshness checks vérifient qu'une table source a été alimentée récemment avant d'exécuter la tâche. Si la table est trop ancienne, la tâche échoue et le pipeline s'arrête — évitant de produire des rapports sur des données périmées.
Configuration
nodes:
monthly_stats:
sql: sql/monthly_stats.sql
target: "{{ params.schema }}.monthly_stats"
output_write: replace
needs: [commandes]
freshness_check:
column: updated_at # colonne TIMESTAMP à contrôler
max_hours: 24 # échoue si MAX(updated_at) > 24h
Comment ça fonctionne
Avant d'exécuter le SQL de la tâche, Noria exécute :
SELECT EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(updated_at))) / 3600.0 AS age_hours
FROM schema.table_cible
- Si
age_hours > max_hours→ la tâche échoue avec un message explicite - Si la table est vide → warning loggé, la tâche continue
- Si la colonne n'existe pas → warning loggé, la tâche continue
Exemple d'erreur
ExecutionError: Freshness check FAILED for 'monthly_stats':
table 'main.commandes' column 'updated_at' is 36.2h old
(max allowed: 24.0h)
Cas d'usage typiques
Pipeline journalier — vérifier que la source a été alimentée aujourd'hui
nodes:
daily_report:
sql: sql/daily_reportournalier.sql
target: "{{ params.schema }}.daily_report"
freshness_check:
column: date_load_orders
max_hours: 25 # tolérance d'1h pour les décalages de planification
Données temps réel — alerter si plus de 2h de retard
nodes:
live_dashboard:
sql: sql/dashboard.sql
target: "{{ params.schema }}.dashboard"
freshness_check:
column: ts_evenement
max_hours: 2
soft_fail: true # warning sans bloquer le pipeline
Freshness sur la table cible elle-même
Utile pour vérifier qu'une tâche précédente a bien alimenté la table avant d'en dépendre :
nodes:
monthly_aggreg:
sql: sql/agreg.sql
target: "{{ params.schema }}.agreg"
needs: [load_raw]
freshness_check:
column: _noria_updated_at # colonne technique ajoutée dans le SELECT
max_hours: 2
# Dans sql/load_raw.sql :
# SELECT *, CURRENT_TIMESTAMP AS _noria_updated_at FROM source
Ne pas bloquer sur une source externe
Si la table source est alimentée par un tiers (flux externe, partenaire), tu peux logguer sans bloquer :