Vos exécutions dbt font-elles discrètement grimper les coûts de calcul de l'entrepôt ?
dbt exécute tout dans l'entrepôt, donc un full refresh là où un chargement incrémental suffirait, ou une matérialisation en table qui se reconstruit chaque nuit, se traduit par des coûts de calcul, pas par une erreur. La logique incrémentale est optionnelle dans dbt. Dans un Data Vault généré, c'est la seule façon dont les chargements sont écrits.
Cela vous semble familier ?
- L'exécution nocturne réussit, et la facture Snowflake ou BigQuery qu'elle génère grossit chaque trimestre sans qu'aucun nouveau modèle ait été ajouté.
- La moitié du projet est matérialisée en tables qui se reconstruisent en entier parce que la logique incrémentale n'a jamais été écrite pour elles.
- Un petit changement en amont déclenche une exécution sur tout le DAG, et personne ne sait quelle partie avait réellement besoin de tourner.
- Le service financier demande pourquoi les coûts de calcul ont augmenté, et la réponse honnête est une liste de modèles que personne n'a profilés.
dbt, désormais une seule entreprise avec Fivetran, exécute chaque modèle dans l’entrepôt. C’est la bonne architecture. Cela signifie aussi que l’inefficacité n’a pas d’état d’erreur : un modèle qui reconstruit un an d’historique chaque nuit réussit, et le coût apparaît ailleurs.
Pourquoi les coûts de calcul dérivent
- Les reconstructions complètes sont le comportement par défaut. Une matérialisation
tablesupprime et recrée la table à chaque exécution. La rendre incrémentale est un travail supplémentaire par modèle, et ce travail est facile à repousser. - La logique incrémentale est sur mesure. Les clés uniques, les fenêtres de rattrapage et les stratégies de merge sont décidées modèle par modèle, par celui qui l’a écrit, et elles divergent d’un développeur à l’autre.
- Le DAG s’exécute sur un périmètre plus large que le changement. Une seule entrée modifiée peut déclencher une exécution sur de nombreux modèles en aval, dont la plupart produisent le même résultat qu’hier.
- Personne ne profile ce qui fonctionne. Tant qu’une exécution se termine en vert, personne ne regarde plus loin. Le coût de calcul par modèle est visible dans la console de l’entrepôt, pas dans le pipeline.
Rien de tout cela n’est la faute de dbt. Une logique de transformation écrite à la main est aussi efficace que le temps dont son auteur disposait pour l’optimiser.
Où l’efficacité devrait se situer
- Le delta devrait être le seul mode de chargement. Si le pattern de chargement est généré, l’incrémental n’est pas un choix qu’un développeur fait sous pression. C’est la façon dont chaque chargement est écrit.
- L’historique devrait être isolé en un seul endroit. Les satellites conservent les changements au fil du temps, donc la couche des marts n’a jamais à recalculer l’historique pour répondre à une question sur le présent.
- Du SQL ensembliste pour le moteur que vous exploitez. Le code généré peut être optimisé par plateforme une seule fois, plutôt que modèle par modèle, par celui qui l’a écrit.
Ce qui change avec Datavault Builder
Datavault Builder génère des chargements delta ensemblistes pour les hubs, links et satellites, optimisés pour le moteur cible, donc la partie chère du pipeline ne touche jamais que ce qui a changé.
- Chaque chargement est un delta par construction. Les lignes nouvelles et modifiées sont détectées par rapport à ce qui est déjà historisé. Rien n’est supprimé et recréé.
- L’historique est conservé dans les satellites. Les questions sur l’état passé trouvent leur réponse dans les changements déjà stockés, et non en reconstruisant le passé à chaque exécution. Les chargements bi-temporels et les tables point-in-time sont des patterns que la plateforme propose nativement, pas quelque chose à construire à partir de macros.
- Le périmètre d’exécution suit le modèle. Les dépendances sont dérivées, donc un changement charge ce qu’il touche et rien au-delà.
- dbt State et Fusion aident toujours si dbt reste. Datavault Builder peut générer les modèles dbt pour les équipes qui y gardent l’exploitation, et celles-ci profitent du fait que les modèles inchangés sont sautés. Les couches générées en dessous n’ont jamais eu besoin d’être sautées, parce qu’elles ne faisaient jamais le travail complet.
- Les coûts de calcul deviennent prévisibles. Le coût de chargement suit l’ampleur des changements dans les sources, pas la taille totale de l’entrepôt, et c’est un chiffre que vous pouvez surveiller.
Ce qu’il faut décider
Prenez les dix modèles les plus chers dans l’historique des requêtes de l’entrepôt du dernier mois. Si la plupart sont des modèles de staging ou d’historique reconstruits en entier, c’est exactement la couche qui devrait être générée.
Voyez-le fonctionner sur l'une de vos sources
Réservez une démo gratuite et apportez le connecteur qui vous coûte le plus cher, en argent ou en temps.
Trois étapes vers un pipeline que vous maîtrisez
-
Trouver les reconstructions complètes
Triez les modèles selon le calcul consommé par exécution. Les matérialisations en table de grandes sources sont généralement en tête de liste.
-
Générer les chargements delta
Dans Datavault Builder, les hubs, les links et les satellites se chargent en comparant les données à ce qui est déjà historisé. Seuls les changements circulent.
-
Exécuter le reste par-dessus
Les marts et les métriques se calculent à partir d’un vault qui n’a changé que là où la source a changé.
Comment Datavault Builder supprime les frictions de l'ingestion
-
L'ingestion est intégrée
Chargements batch, delta et CDC depuis les bases de données, les fichiers, les API REST, les sources NoSQL et Python, les flux comme Kafka arrivant en micro-batches. La même plateforme qui génère le warehouse, sans seconde facture.
-
Votre schéma, pas celui du fournisseur
Les tables source sont mappées vers un modèle Data Vault 2.0 que vous avez conçu. Une nouvelle colonne ou une table renommée change un mapping, pas une chaîne de scripts post-chargement.
-
Seuls les deltas circulent
Les Hubs, Links et Satellites chargent ce qui a changé. Les rechargements complets restent en staging au lieu d’être retraités en aval chaque nuit.
-
L'historique est conservé par conception
Chaque changement est conservé tel qu’il arrive, donc le reporting historique fonctionne même là où la source écrase ses propres lignes.
-
Du code que vous n'écrivez jamais
Le chargement, l’historisation et la traçabilité sont générés depuis le modèle en temps réel et s’exécutent nativement sur Snowflake, Databricks, BigQuery, SQL Server, Fabric, Oracle ou PostgreSQL.
-
Une plateforme, jusqu'à neuf outils en moins
Modélisation, ETL, CI/CD, documentation et traçabilité au même endroit. C’est ce qui rend possible les 14,7 minutes entre le besoin et la production.
Rencontrez notre expert
Vingt minutes avec notre Sales Director et une réponse honnête sur l’adéquation avec votre stack.
Matt Collett
Sales Director
Parfait, choisissez un créneau qui vous convient :
Les autres problèmes traités par cette série
-
Le compromis dbt : prolifération du code, TCO caché et les arguments en faveur de la modélisation automatisée
dbt a apporté le génie logiciel au SQL, et les équipes ont raison de le vouloir. Le compromis est une couche de transformation qui s’alourdit en code, en coût et en calcul, au-dessus d’un outil d’ingestion qui reste un produit séparé. Un Data Vault généré retire toute cette couche de la base de code. Il n’a pas besoin de dbt, mais il peut se combiner avec lui.
-
dbt vous laisse-t-il encore charger les données vous-même ?
dbt est un outil de transformation par conception. Il suppose que les données brutes sont déjà dans l’entrepôt, donc l’étape de chargement est un second produit avec une seconde facture, même maintenant que Fivetran et dbt Labs sont une seule entreprise. Une plateforme d’entrepôt qui ingère et modélise au même endroit comble la lacune sans second contrat.
-
Votre projet dbt compte-t-il plus de modèles que quiconque ne peut expliquer ?
ref() fait d’un nouveau modèle une décision d’une ligne, et un projet de centaines de fichiers SQL sans gouvernance claire en est le résultat. Changer une clé métier en amont revient alors à retrouver chaque modèle qui en a hérité. La solution ne consiste pas à ajouter des tests. C’est un modèle qui génère la structure au lieu de l’accumuler.
Questions et réponses
- Parce qu’ils sont optionnels et écrits à la main par modèle, avec une clé unique, un filtre et souvent une stratégie de merge à mettre au point. En pratique, beaucoup de modèles restent en reconstruction complète parce que la version incrémentale n’a jamais été terminée. Un chargement de satellite généré est incrémental par construction.
- dbt State, introduit avec le moteur Fusion, saute les modèles dont les entrées n’ont pas changé, et dbt Labs fait état d’économies de calcul significatives grâce à lui. Il décide s’il faut exécuter un modèle. Il ne change pas ce que le modèle fait quand il s’exécute, donc une reconstruction complète qui est déclenchée se reconstruit toujours en entier.
- Les chargements sont des opérations delta ensemblistes générées pour le moteur cible. Elles touchent ce qui a changé, ce qui, sur une nuit typique, représente une petite fraction de la source.