Een populaire, maar verkeerde vraag
Met de komst van Snowflake DCM (Database Change Management) duikt op fora en in teams steeds dezelfde vraag op: "Vervangt DCM nu mijn dbt-setup?" of andersom. Het korte antwoord is nee — en wie ze als alternatieven behandelt, bouwt vroeg of laat een rommelige setup waarin twee tools om dezelfde objecten vechten.
dbt en DCM lossen verschillende problemen op. dbt gaat over de T in ELT: het transformeren van ruwe data naar bruikbare modellen. DCM gaat over het declaratief beheren van je objectstructuur: databases, schema's, rollen, warehouses en tabellen. In dit artikel zetten we ze scherp naast elkaar, laten we de overlap-zone zien (want die is er) en geven we een praktische werkverdeling.
Wat is dbt?
Definitie: dbt (data build tool)
dbt is een transformatieframework waarmee je datamodellen schrijft als SQL SELECT-statements. dbt materialiseert die modellen als views, tabellen of incrementele tabellen in je warehouse, en voegt daar tests, documentatie en automatische lineage aan toe. Het draait de transformaties in de database; dbt zelf verplaatst geen data.
De kracht van dbt zit in modulariteit (ref() en source()), versiebeheer, ingebouwde data tests en het feit dat het de standaard is geworden voor analytics engineering. Je beschrijft wat een model moet zijn (een SELECT), en dbt regelt het bouwen ervan en de afhankelijkheden.
-- models/marts/fct_orders.sql SELECT o.order_id, o.customer_id, o.order_total, c.segment FROM {{ ref('stg_orders') }} o JOIN {{ ref('stg_customers') }} c ON c.customer_id = o.customer_id
Wat is Snowflake DCM?
Definitie: Snowflake DCM
Snowflake DCM (Database Change Management) beheert de structuur van je Snowflake-objecten declaratief. Je beschrijft de gewenste eindtoestand met CREATE OR ALTER-definities; de Snowflake CLI (snow dcm) berekent het verschil met de live omgeving en past alleen de noodzakelijke wijzigingen toe — zonder handmatige migratiescripts.
DCM gaat dus niet over de inhoud van je tabellen, maar over hun bestaan en vorm — plus alle andere objecten die een platform draaiend houden: schema's, rollen, grants, warehouses, resource monitors, stages en file formats. Het is de declaratieve opvolger van imperatieve tools als schemachange en Flyway. (Een diepere vergelijking met Databricks lees je in Snowflake DCM vs Databricks Asset Bundles.)
De overlap-zone: wie bouwt welke tabel?
Hier wordt het interessant, want er is overlap. dbt maakt namelijk óók objecten aan: elke keer dat het een model materialiseert, voert het onder water een CREATE uit. Betekent dit dat dbt en DCM elkaar in de weg lopen? Alleen als je het verkeerd inricht.
De gouden regel is ownership: elk object heeft precies één eigenaar.
- dbt is eigenaar van zijn modellen — de views en tabellen die het zelf bouwt in je transformatielagen (staging, intermediate, marts). Laat DCM hier vanaf blijven.
- DCM is eigenaar van de structuur eromheen — databases, schema's, rollen, grants, warehouses, resource monitors, stages, file formats en doorgaans de landing/raw-tabellen waar je ruwe data binnenkomt (die dbt niet bouwt maar wel als
sourcegebruikt).
De grootste valkuil
Laat nooit zowel dbt als DCM hetzelfde object beheren. Als beide tools denken dat ze de eigenaar zijn, overschrijven ze elkaars wijzigingen bij elke run en krijg je onvoorspelbare drift. Trek de grens scherp: DCM tot en met de raw-laag en alle platformobjecten, dbt vanaf de staging-laag.
Vergelijkingstabel
| Dimensie | dbt | Snowflake DCM |
|---|---|---|
| Doel | Data transformeren (T in ELT) | Objectstructuur beheren (DDL) |
| Je schrijft | SQL SELECT-modellen | CREATE OR ALTER-definities |
| Beheert | De modellen die het bouwt | Databases, schema's, rollen, warehouses, tabellen |
| Data tests | Ja (uniqueness, not-null, relationships) | Nee |
| Lineage & docs | Ja, automatisch | Nee |
| Model | Declaratief (SELECT) | Declaratief (eindtoestand) |
| Typische gebruiker | Analytics engineer | Data/platform engineer |
| Vervangt | Handmatige SQL-pipelines | schemachange, Flyway, Liquibase |
Hoe ze samenwerken: een referentie-flow
In een gezonde Snowflake-setup werken dbt en DCM hand in hand. Een typische werkverdeling:
- DCM zet de fundering: maakt de databases, schema's, rollen en grants, een warehouse met resource monitor, en de
RAW-tabellen/stages waar je ingestietool (Fivetran, Airbyte, een eigen pipeline) data in landt. - dbt pakt het stokje over vanaf
RAW: bouwt staging-modellen, business-logica en marts, met tests en documentatie. - CI/CD orkestreert beide: bij een merge draait eerst
snow dcm deploy(structuur klopt), daarnadbt build(modellen en tests).
Zo profiteer je van het beste van twee werelden: betrouwbaar, declaratief structuurbeheer én volwassen, geteste transformaties — allebei vanuit Git.
Wanneer kies je wat?
Je hebt vooral dbt nodig als...
- Je kernprobleem het transformeren en modelleren van data is.
- Je data tests, lineage en documentatie wilt rond je modellen.
- Je structuur relatief simpel is en grotendeels door dbt-modellen wordt gevormd.
Je hebt (ook) DCM nodig als...
- Je platformobjecten declaratief wilt beheren: rollen, grants, warehouses, resource monitors, stages.
- Je af wilt van losse migratiescripts of schemachange.
- Je raw/landing-laag en governance buiten dbt om netjes in code wilt vastleggen.
Meestal: allebei
In de praktijk is het zelden of-of. Volwassen Snowflake-teams gebruiken DCM voor de structuur en governance, en dbt voor de transformaties. Samen geven ze je een volledig in Git beheerd, reproduceerbaar dataplatform.
Conclusie
dbt en Snowflake DCM zijn geen concurrenten maar partners. dbt transformeert je data; DCM beheert je structuur. De enige echte valkuil is het laten overlappen van eigenaarschap — trek de grens helder bij de raw-laag en beide tools versterken elkaar.
Twijfel je hoe je dbt en DCM het beste combineert in jouw Snowflake-omgeving, of wil je je CI/CD daaromheen inrichten? Neem gerust contact op — ik denk graag met je mee.
Veelgestelde vragen
Is dbt een alternatief voor Snowflake DCM?
Nee. dbt transformeert data, DCM beheert objectstructuur. Ze lossen verschillende problemen op en werken juist goed samen.
Beheert dbt ook objecten in Snowflake?
Ja, maar alleen de objecten die het zelf bouwt (modellen als views/tabellen). Rollen, grants, warehouses, stages en landing-tabellen passen beter bij DCM.
Kan ik dbt en DCM samen gebruiken?
Ja, dat is aanbevolen: DCM voor structuur en governance, dbt voor transformaties. Vermijd dat beide hetzelfde object beheren.
Wie gebruikt wat in een team?
Analytics engineers werken in dbt; data/platform engineers beheren structuur met DCM. In kleine teams doet één persoon beide.