De demo is gegeven met Python versie 3.9, maar zou in principe met elke versie vanaf 3.9 moeten werken. Installeer de laatste versie van Python voor jouw platform
Verder heb je Git nodig
Ten slotte wordt in deze demo DuckDB gebruikt. Het is handig om de Command line versie van DuckDB te installeren,
maar je zou ook prima met de Python library voor DuckDB kunnen werken (deze wordt automatisch geïnstalleerd bij de installatie van dbt-duckdb
, zie verderop.)
Om het jezelf nog gemakkelijker te maken is het aan te raden om bijvoorbeeld DBeaver te installeren. Deze SQL editor heeft een connector voor DuckDB.
Clone deze repository naar een directory op je pc.
Het is altijd aan te raden om voor ieder Python project een virtuele omgeving aan te maken. Zo kun je per project verschillende versies van Python en libraries gebruiken
en voorkom je conflicten als libraries globaal geïnstalleerd worden. Er zijn veel manieren en 3rd party tools om virtuele omgevingen te maken, maar het eenvoudigst
is om gewoon het ingebouwde script venv
te gebruiken.
Ga in de command line naar de geclonede dbt-project directory en voer het volgende commando uit (Windows):
py -m venv .venv
Dit commando creëert een directory genaamd .venv
. Vervolgens moet je de virtuele omgeving activeren. Voer het volgende commando uit (Windows):
.venv\Scripts\activate
Belangrijk: De instructies vanaf hier gaan ervan uit dat je de virtuele omgeving geactiveerd hebt. Dus ook het runnen van dbt commando's.
Het deactiveren van een Python virtuele omgeving doe je met het commando deactivate
. Heractiveren doe je simpelweg weer met .venv\Scripts\activate
.
Voer het volgende commando uit vanuit je virtuele omgeving:
pip install dbt-core dbt-duckdb
Nu kan je testen of dbt werkt door het volgende command in te voeren:
dbt debug
Er vanuit gaande dat je de DuckDB command line versie hebt geïnstalleerd, en deze executable is toegevoegd aan je PATH environment variabele, voer
je de volgende commando's uit om een database genaamd dev.duckdb
aan te maken en deze te vullen met de TPC-H dataset:
duckdb dev.duckdb
Vervolgens in de DuckDB shell:
INSTALL tpch;
LOAD tpch;
CALL dbgen(sf = 1);
Bovenstaand commando neemt enige tijd in beslag en vraagt wat geheugen van je pc. Je kan spelen met de scale factor om nog grotere datasets te genereren, maar dit vraagt wel meer geheugen. Het is ook mogelijk om stapsgewijs data te genereren en zo minder geheugen te gebruiken. Meer informatie over de TPC-H extensie lees je hier
Mocht je willen werken met de DuckDB Python library (in plaats van de command line tool), dan open je simpelweg een Python shell vanuit je virtuele omgeving:
python
Vervolgens kan je verbinding maken met de dev.duckdb
database (of aanmaken als deze nog niet bestaat) en SQL-statements draaien:
import duckdb
con = duckdb.connect("dev.duckdb")
con.sql("INSTALL tpch;")
etc...
Om de modellen te draaien voer je het volgende commando uit:
dbt run --vars 'run_date: 2024-10-30'
Met de --vars
optie kan je variabelen meegeven aan het dbt run commando. Let er op dat deze zijn gedefinieerd in dbt_project.yml
.
Unit tests voer je uit nadat dbt run gedraaid heeft, anders mislukken ze, want de materialisaties (tabellen en views) bestaan immers nog niet in je database:
dbt test
Wil je met een schoon/nieuw dbt-project beginnen, dan kan je de volgende stappen volgen:
- Maak een nieuwe directory aan voor je virtuele omgeving. Bijvoorbeeld
mkdir mijn-dbt-project
encd mijn-dbt-project
- Maak een nieuwe Python virtuele omgeving:
py -m venv .venv
- Activeer de nieuwe omgeving:
.venv\Scripts\activate
- Installeer dbt en de connector die je wil gebruiken, bijvoorbeeld voor Duckdb:
pip install dbt-core dbt-duckdb
- Initialiseer een nieuw dbt project:
dbt init
en volg de instructies op het scherm - dbt maakt een nieuw project aan in een nieuwe directory onder je projectdirectory. Dit is ietwat onhandig omdat je waarschijnlijk alles in een directory wil hebben (dbt + Git + Python venv), maar helaas werkt het zo.
- Het nieuwe project is niet helemaal leeg, er staan enkele 'dummy' modellen in.
- dbt installeert het bestand
profiles.yml
standaard in de directory~/.dbt
. Dit omdat je hier mogelijk database-credentials (wachtwoorden etc.) in opslaat, en je deze natuurlijk niet in je Git repo wil hebben staan.