Jak zainstalować dbt za pomocą Dockera i PostgreSQL
W tym artykule omówię instalację dbt przy użyciu Dockera i PostgreSQL jako źródła danych i miejsca docelowego.
Wyjaśnię każdy krok wystarczająco szczegółowo, abyś mógł odtworzyć go bez żadnych błędów.
Jeśli coś będzie nie tak, powiedz mi, żebym mógł zaktualizować treść i utrzymać ten przewodnik tak długo, jak to możliwe
1. Sprawdź instalację Dockera
Najpierw sprawdź, czy Docker jest poprawnie zainstalowany na twoim komputerze.
Aby to zrobić, możesz wpisać następujące dwa polecenia:
docker --version
Docker version 20.10.12, build e91ed57docker-compose --version
Docker Compose version v2.2.3
Jeśli tak nie jest, najprostszym sposobem jest zainstalowanie Docker Desktop (który posiada również wygodny interfejs graficzny) i zainstalowanie wersji odpowiadającej Twojemu systemowi operacyjnemu.
Proponowane manipulacje przetestowałem na Windows 10, Ubuntu 20.04 i Mac OS X Montery.
2. Zbuduj plik Docker Compose
Na razie (marzec 2023 r.) nie ma oficjalnej recepty Dockera na skonfigurowanie lokalnego środowiska Docker dla dbt. Musimy polegać na społecznościowych obrazach Dockera i budować naszą konfigurację.
Wykorzystamy obraz Dockera z repozytorium Artykułu 1 DataOps Github [1], w którym można znaleźć wiele obrazów Dockera, które odpowiadają Twoim potrzebom.
Zacznijmy od prostego i użyjmy „kompletnego” obrazu w konfiguracji docker-compose.yml :
version: '3'
services:
dbt:
image: article1dataops/dbt:latest
volumes:
- .:/usr/app
ports:
- "8080:8080"
# Required for the tutorial
db:
image: postgres
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: my_app
ports:
- "5432:5432"
Aby wykonać ten samouczek, skopiuj ten plik do folderu o nazwie dbt_app . Następnie za pomocą terminala możesz uruchomić ask Docker to install dbt:
docker-compose up
docker ps
error during connect: This error may indicate that the docker daemon is not running.: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json": open //./pipe/docker_engine: The specified file can't be found.
Wreszcie, możesz również zajrzeć do klienta Docker Desktop UI: jeśli pasek stanu jest zielony, silnik jest uruchomiony i działa zgodnie z oczekiwaniami!
ZIELONY = ✅
Po zainstalowaniu obrazu w przyszłości będziesz potrzebować tylko instrukcji docker-compose up „jak zwykle”.
4. Zainicjuj swój projekt: polecenie dbt init
Teraz możemy użyć dbt do zainicjowania się za pomocą polecenia dbt init [2]:
docker compose run dbt dbt init --profiles-dir /usr/app
# Replace "my_dbt_project" by the name of your dbt project
mv my_dbt_project/* .
rm -r my_dbt_project
5. Skonfiguruj swoją testową bazę danych PostgreSQL
Być może zauważyłeś, że moja konfiguracja Dockera zawiera obraz postgres z bazą danych. Chociaż nie jest to wymagane , chciałbym, abyś zbudował widoki i tabele z tego samouczka, podobnie jak w przypadku innych baz danych, z którymi możesz pracować.
Najpierw dodajmy kilka tabel i danych do naszej bazy danych:
docker-compose exec db psql -U postgres -c "CREATE TABLE users(id SERIAL PRIMARY KEY, name VARCHAR(200), city_code VARCHAR(3));" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.users(name, city_code) VALUES('mickael', 'BCN');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.users(name, city_code) VALUES('timmy', 'MAD');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.users(name, city_code) VALUES('jeane', 'PAR');" my_app
docker-compose exec db psql -U postgres -c "CREATE TABLE cities(city_code VARCHAR(3), city VARCHAR(200), country VARCHAR(200));" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.cities(city_code, city, country) VALUES('BCN', 'Barcelona', 'Spain');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.cities(city_code, city, country) VALUES('MAD', 'Madrid', 'Spain');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.cities(city_code, city, country) VALUES('PAR', 'Paris', 'France');" my_app
docker-compose exec db psql -U postgres -c "SELECT * FROM users;" my_app
Database Creation: ✅
Konfigurację źródeł danych należy ustawić w pliku profiles.yml [3] .
Ponieważ wybraliśmy już PostgreSQL jako naszą „hurtownię danych”, dbt wygenerował dla nas szablon:
# profiles.yml
app:
outputs:
dev:
type: postgres
threads: [1 or more]
host: [host]
port: [port]
user: [dev_username]
pass: [dev_password]
dbname: [dbname]
schema: [dev_schema]
prod:
type: postgres
threads: [1 or more]
host: [host]
port: [port]
user: [prod_username]
pass: [prod_password]
dbname: [dbname]
schema: [prod_schema]
target: dev
Właściwość targetustawia główny cel, gdy go nie określisz: jak można odczytać z pliku, domyślnie wyprowadzamy transformacje dbt do konfiguracji dev.
Możesz wypełnić wymagane informacje z ustawieniami z konfiguracji Dockera. Możesz wybrać liczbę wątków w zależności od mocy komputera. Najczęściej wybierałem 4:
dev:
type: postgres
threads: 4
host: db
port: 5432
user: postgres
pass: password
dbname: my_app
schema: dev
docker compose run dbt dbt run
docker-compose exec db psql -U postgres -c "\dt" my_app
docker-compose exec db psql -U postgres -c "\dv" my_app
dbt transformations into PostgreSQL Database: ✅
Jeśli chcesz dokładnie przyjrzeć się kodowi, możesz sprawdzić repozytorium GitHub [4], które stworzyłem na potrzeby tego artykułu.
Wniosek: Czego się nauczyłeś?
- Jak skonfigurować projekt dbt z Dockerem;
- Jak skonfigurować przygotowanie źródła danych dla dbt: tutaj wykorzystaliśmy dockeryzowaną bazę danych PostgreSQL
- Jak wykonać transformacje do bazy danych i sprawdzić, czy to działa.
[1] dbt obraz Dockera
[2] Przykładowe dane z Airbyte Documentation
[3] Wtyczka Postgres z dbt Documentation
[4] Repozytorium projektu na GitHub
Kodowanie na wyższym poziomie
Dziękujemy za bycie częścią naszej społeczności! Zanim pójdziesz:
- Klaskajcie za relację i śledźcie autora
- Zobacz więcej treści w publikacji Level Up Coding
- Bezpłatny kurs rozmowy o kodowaniu ⇒ Zobacz kurs
- Śledź nas: Twitter | LinkedIn | Biuletyn

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































