🧱 Contexte : besoin d’analytique en temps réel + historique
Dans de nombreux cas (ex : reporting, tableaux de bord, alerting) tu veux :
- 🔥 accéder rapidement aux données récentes (ex: dernières 24h)
- 🧊 conserver les historiques (ex: 2 ans de données)
- ✅ avoir une bonne performance et optimisation de stockage
✅ Solution : incremental materialization
+ partitionnement
C’est la stratégie la plus efficace dans dbt pour :
- éviter de tout recalculer
- garder la table compacte
- optimiser les requêtes et les coûts
🔧 Comment ça fonctionne ?
1. Materialized=’incremental’ :
Seul le nouveau lot de données est inséré (ou fusionné), pas toute la table.
2. Partitionnement (par ex : event_date
) :
Les données sont physiquement séparées par jour, semaine, mois…
3. Stratégie de rafraîchissement ciblée :
Tu peux choisir d’actualiser uniquement les partitions récentes (celles sujettes à des changements).
🧪 Exemple dbt avec partitionnement
{{ config(
materialized='incremental',
unique_key='event_id',
incremental_strategy='merge',
partition_by = {
"field": "event_date",
"data_type": "date"
}
) }}
SELECT
event_id,
user_id,
event_type,
event_date,
updated_at
FROM {{ ref('stg_events') }}
WHERE event_date >= date_add(current_date, -7) -- 🔁 ne recharge que 7 jours
🔥 Résultat
- ✅ dbt ne réécrit que les partitions des 7 derniers jours
- 🧊 Les partitions plus anciennes restent intactes (lecture rapide, stockage optimisé)
- 🔄 Si tu relances le modèle tous les jours, seules les partitions chaudes sont modifiées
📦 Optimisation possible avec Delta / BigQuery / Snowflake :
Système | Optimisation possible |
---|---|
Delta Lake | hot/cold storage avec tiered files |
BigQuery | clustering + partition pruning automatique |
Snowflake | partitionnement logique + pruning |
🎯 Avantages
Avantage | Détail |
---|---|
⚡ Rapide sur les données récentes | Lecture ciblée des partitions « chaudes » |
💾 Économie de stockage | Pas de duplication ni recalcul complet |
🔁 Facilité de rafraîchissement | Tu peux cibler dynamiquement les partitions à recharger |
🧠 Compatible analytics/historique | Tu as les deux : fraîcheur et profondeur |
✅ Résumé
Utiliser l’incrémental avec partitionnement dans dbt est la meilleure stratégie pour allier performance et stockage dans les cas d’analyse temps réel.
Tu réactualises seulement ce qui change (les données récentes), tout en conservant l’historique intact et optimisé.