Treibt Ihr dbt-Run still und leise die Warehouse-Compute-Kosten hoch?
dbt führt alles im Warehouse aus, ein Full Refresh, wo ein inkrementeller Lauf reichen würde, oder eine Tabellen-Materialisierung, die jede Nacht neu gebaut wird, zeigt sich also als Credits, nicht als Fehler. Inkrementelle Logik ist in dbt optional. In einem generierten Data Vault ist sie die einzige Art, wie Loads geschrieben werden.
Kommt Ihnen das bekannt vor?
- Der nächtliche Lauf funktioniert, und die Snowflake- oder BigQuery-Rechnung dafür wird jedes Quartal größer, ohne dass ein neues Modell hinzugekommen wäre.
- Das halbe Projekt ist als Tabellen materialisiert, die komplett neu gebaut werden, weil die inkrementelle Logik dafür nie geschrieben wurde.
- Eine kleine Änderung weiter oben löst einen Lauf über den ganzen DAG aus, und niemand ist sicher, welcher Teil tatsächlich laufen musste.
- Die Finanzabteilung fragt, warum die Compute-Kosten gestiegen ist, und die ehrliche Antwort ist eine Liste von Modellen, die niemand profiliert hat.
dbt, inzwischen gemeinsam mit Fivetran unter einem Dach, führt jedes Modell im Warehouse aus. Das ist die richtige Architektur. Es bedeutet auch, dass Ineffizienz keinen Fehlerzustand hat: Ein Modell, das jede Nacht ein Jahr Historie neu baut, läuft erfolgreich durch, und die Kosten tauchen woanders auf.
Warum die Compute-Kosten schleichend steigt
- Vollständige Neuaufbauten sind der Standard. Eine
tableMaterialisierung löscht und erstellt bei jedem Lauf neu. Sie inkrementell zu machen ist Zusatzarbeit pro Modell, und diese Arbeit lässt sich leicht verschieben. - Inkrementelle Logik erfordert Handarbeit. Unique-Keys, Lookback-Fenster und Merge-Strategien werden pro Modell entschieden, von dem, der es geschrieben hat, und zwischen Entwicklern driften sie auseinander.
- Der DAG läuft breiter als die Änderung. Eine geänderte Eingabe kann einen Lauf über viele Modelle weiter unten auslösen, von denen die meisten dieselbe Ausgabe liefern wie gestern.
- Solange ein Lauf grün durchläuft, hinterfragt niemand die Effizienz. Eine Performance-Analyse findet nicht statt. Compute pro Modell ist in der Warehouse Konsole sichtbar, nicht in der Pipeline.
Nichts davon ist ein Fehler von dbt. Handgeschriebene Transformationslogik ist so effizient, wie die Person, die sie geschrieben hat, Zeit hatte, sie zu machen.
Wo Effizienz hingehört
- Inkrementelles Delta-Laden muss der Standard sein. Wenn das Lademuster generiert wird, ist inkrementell keine Wahl, die ein Entwickler unter Termindruck trifft. Es ist die Art, wie jeder Load geschrieben wird.
- Historie sollte an einem Ort isoliert sein. Satelliten halten Änderungen über die Zeit, die Mart-Schicht muss also nie Historie neu berechnen, um eine Frage zum Jetzt zu beantworten.
- Mengenbasiertes SQL für die Engine, die Sie betreiben. Generierter Code lässt sich einmal pro Plattform tunen, statt pro Modell durch den, der es geschrieben hat.
Was sich mit Datavault Builder ändert
Datavault Builder generiert mengenbasierte Delta-Loads für Hubs, Links und Satelliten, abgestimmt auf die Zielengine, sodass der teure Teil der Pipeline immer nur das berührt, was sich geändert hat.
- Jeder Load ist konzeptionell bedingt ein Delta. Neue und geänderte Zeilen werden gegen das erkannt, was bereits historisiert ist. Nichts wird gelöscht und neu erstellt.
- Historie lebt in Satelliten. Stichtagsabfragen (As-Was) werden aus gespeicherten Änderungen beantwortet, nicht indem die Vergangenheit bei jedem Lauf neu gebaut wird. Bitemporale Loads und Point-in-Time-Tabellen sind Patterns, die die Plattform von Haus aus bietet, nichts, was aus Makros gebaut werden muss.
- Der Ausführungsumfang richtet sich nach den tatsächlichen Änderungen. Abhängigkeiten werden abgeleitet, eine Änderung lädt also, was sie berührt, und nichts darüber hinaus.
- dbt-State und Fusion helfen weiterhin, wenn dbt bleibt. Datavault Builder kann die dbt Modelle für Teams generieren, die den Betrieb dort behalten, und diese profitieren von übersprungenen unveränderten Modellen. Die generierten Schichten darunter mussten nie übersprungen werden, weil sie nie die volle Arbeit gemacht haben.
- Compute wird vorhersehbar. Die Ladekosten folgen dem, wie viel sich die Quellen geändert haben, nicht der Gesamtgröße des Warehouse, und das ist eine Zahl, die Sie beobachten können.
Was zu entscheiden ist
Nehmen Sie die zehn teuersten Modelle aus der Warehouse Query-Historie des letzten Monats. Wenn die meisten davon Staging oder Historienmodelle sind, die komplett neu gebaut werden, ist das die generierte Schicht, die darauf wartet zu existieren.
Erleben Sie es live mit Ihren eigenen Datenquellen
Buchen Sie eine kostenlose Demo und bringen Sie den Connector mit, der Sie am meisten kostet, an Geld oder an Zeit.
In drei Schritten zu einer Pipeline, die Sie kontrollieren
-
Die Full Rebuilds finden
Sortieren Sie Modelle nach Compute pro Lauf. Tabellen-Materialisierungen großer Quellen stehen meist ganz oben.
-
Die Delta-Loads generieren
Hubs, Links und Satelliten werden in Datavault Builder geladen, indem gegen das verglichen wird, was bereits historisiert ist. Nur Änderungen bewegen sich.
-
Den Rest obendrauf laufen lassen
Marts und Kennzahlen rechnen auf einem Vault, der sich nur dort geändert hat, wo es die Quelle tat.
Wie Datavault Builder die Reibungsverluste in der Ingestion beseitigt
-
Ingestion ist eingebaut
Batch-, Delta- und CDC-Ladevorgänge aus Datenbanken, Dateien, REST-APIs, NoSQL und Python-Quellen, mit Streams wie Kafka, die als Micro-Batches ankommen. Dieselbe Plattform, die das Warehouse generiert, keine zweite Rechnung.
-
Ihr Schema, nicht das des Anbieters
Quelltabellen werden auf ein Data-Vault-2.0-Modell gemappt, das Sie entworfen haben. Eine neue Spalte oder eine umbenannte Tabelle ändert ein Mapping, keine Kette von Skripten nach dem Load.
-
Nur Deltas bewegen sich
Hubs, Links und Satelliten laden, was sich geändert hat. Vollständige Ladevorgänge bleiben im Staging, statt jede Nacht weiter unten neu verarbeitet zu werden.
-
Historie wird von Haus aus behalten
Jede Änderung wird so festgehalten, wie sie eintrifft. Historien- und Stichtagsabfragen funktionieren also auch dort, wo die Quelle ihre eigenen Zeilen überschreibt.
-
Code, den Sie nie von Hand schreiben
Laden, Historisierung und Lineage werden in Echtzeit aus dem Modell generiert und laufen nativ auf Snowflake, Databricks, BigQuery, SQL Server, Fabric, Oracle oder PostgreSQL.
-
Eine Plattform, bis zu neun Tools weniger
Modellierung, ETL, CI/CD, Dokumentation und Lineage an einem Ort. Das ist es, was 14,7 Minuten von der Anforderung bis zur Produktion möglich macht.
Sprechen Sie mit unserem Experten
Zwanzig Minuten mit unserem Sales Director und eine ehrliche Antwort, ob das zu Ihrem Stack passt.
Matt Collett
Sales Director
Perfekt, wählen Sie einen passenden Termin:
Weitere Probleme in dieser Serie
-
Der dbt Kompromiss: Code-Wildwuchs, versteckte TCO und das Argument für automatisierte Modellierung
dbt hat Software Engineering in SQL gebracht, und Teams wollen das zu Recht. Der Preis ist eine Transformationsschicht, die in Code, Kosten und Compute wächst, auf einem Ingestion-Tool, das weiterhin ein separates Produkt ist. Ein generierter Data Vault nimmt diese ganze Schicht aus der Codebasis. Er braucht dbt nicht, lässt sich aber damit kombinieren.
-
Überlässt dbt es weiterhin Ihnen, die Daten selbst zu landen?
dbt ist von seinem Design her ein Transformationstool. Es setzt voraus, dass die Rohdaten bereits im Warehouse liegen, der Landing-Schritt ist also ein zweites Produkt mit einer zweiten Rechnung, auch jetzt, wo Fivetran und dbt Labs ein Unternehmen sind. Eine Warehouse-Plattform, die an einem Ort lädt und modelliert, schließt die Lücke ohne zweiten Vertrag.
-
Hat Ihr dbt-Projekt mehr Modelle, als irgendjemand erklären kann?
ref() macht ein neues Modell zu einer Entscheidung von einer Zeile, und ein Projekt aus Hunderten kaum kontrollierter SQL-Dateien ist das Ergebnis. Einen Business-Key weiter oben zu ändern heißt dann, jedes Modell zu finden, das ihn geerbt hat. Die Lösung lautet nicht, noch mehr Tests zu schreiben. Es ist ein Modell, das die Struktur generiert, statt sie anzuhäufen.
Fragen und Antworten
- Weil sie optional sind und pro Modell von Hand geschrieben werden, mit einem Unique Key, einem Filter und oft einer Merge Strategie, die man richtig hinbekommen muss. In der Praxis bleiben viele Modelle Full Table Rebuilds, weil die inkrementelle Version nie fertig wurde. Ein generierter Satelliten Load ist konzeptionell bedingt inkrementell.
- dbt-State, eingeführt mit der Fusion Engine, überspringt Modelle, deren Eingaben sich nicht geändert haben, und dbt Labs berichtet von spürbaren Compute Einsparungen dadurch. Es entscheidet, ob ein Modell läuft. Es ändert nicht, was das Modell tut, wenn es läuft, ein ausgelöster Full Rebuild baut also weiterhin komplett neu.
- Die Loads sind mengenbasierte Delta Operationen, generiert für die Zielengine. Sie berühren, was sich geändert hat, und das ist in einer typischen Nacht ein kleiner Bruchteil der Quelle.