Docker ve PostgreSQL ile dbt Kurulumu
Bu yazıda, veri kaynağı ve hedef olarak Docker ve PostgreSQL kullanarak dbt kurulumunu ele alacağım.
Her adımı, hatasız bir şekilde yeniden oluşturmanız için yeterli ayrıntıyla açıklayacağım.
Bir şeyler ters giderse, lütfen bana bildirin ki içeriği güncelleyebileyim ve bu kılavuzu olabildiğince uzun süre doğru tutabileyim
1. Docker kurulumunu kontrol edin
Öncelikle, Docker'ın bilgisayarınızda doğru bir şekilde kurulup kurulmadığını kontrol edin.
Bunu yapmak için aşağıdaki iki komutu yazabilirsiniz:
docker --version
Docker version 20.10.12, build e91ed57docker-compose --version
Docker Compose version v2.2.3
Durum böyle değilse, en kolay yol Docker Desktop'ı (aynı zamanda uygun bir grafik arayüze sahiptir) ve işletim sisteminize karşılık gelen sürümü kurmaktır.
Önerilen manipülasyonları Windows 10, Ubuntu 20.04 ve Mac OS X Montery'de test ettim.
2. Docker Compose Dosyasını Oluşturun
Şu an için (Mart 2023), dbt için yerel bir Docker ortamı kurmaya yönelik resmi bir Docker tarifi yoktur. Topluluk Docker görüntülerine güvenmeli ve yapılandırmamızı oluşturmalıyız.
İhtiyaçlarınıza uygun birden çok Docker görüntüsü bulabileceğiniz, Madde 1 DataOps Github deposundaki [1] Docker görüntüsünü kullanacağız.
Kolaydan başlayalım ve "tamamlanmış" görüntüyü bir docker-compose.yml yapılandırmasında kullanalım:
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"
Bu öğreticiyi takip etmek için bu dosyayı dbt_app adlı bir klasöre kopyalayın . Ardından, bir terminal kullanarak, Docker'dan dbt'yi kurmasını istemeye başlayabilirsiniz:
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.
Son olarak, Docker Desktop UI istemcisinin içine de bakabilirsiniz: durum çubuğu yeşilse, motor çalıştırılır ve beklendiği gibi çalışır!
YEŞİL = ✅
Görüntü yüklendikten sonra, gelecekte yalnızca docker-compose up "as zamanki gibi" talimatına ihtiyacınız olacak.
4. Projenizi Başlatın: dbt init Komutu
Artık dbt init komutunu [2] kullanarak kendini başlatmak için dbt'yi kullanabiliriz :
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. Test PostgreSQL Veritabanınızı Kurun
Docker yapılandırmamın veritabanı içeren bir postgres görüntüsü içerdiğini fark etmiş olabilirsiniz . Gerekli olmamakla birlikte , çalışmak zorunda kalabileceğiniz diğer tüm veritabanlarında olduğu gibi, bu öğreticiden görünümler ve tablolar oluşturmanızı istiyorum.
Öncelikle veritabanımıza bazı tablolar ve veriler ekleyelim:
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: ✅
Veri kaynaklarının yapılandırması, profiles.yml [3] dosyasında ayarlanmalıdır .
"Veri ambarımız" olarak zaten PostgreSQL'i seçtiğimiz için, dbt bizim için bir şablon oluşturdu:
# 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
Özellik, targetsiz belirtmediğinizde ana hedefi ayarlar: dosyadan da okuyabileceğiniz gibi, varsayılan olarak, yapılandırmaya dbt dönüşümlerinin çıktısını veririz dev.
Docker konfigürasyonundaki ayarlar ile gerekli bilgileri doldurabilirsiniz. Bilgisayarınızın gücüne göre thread sayısını seçebilirsiniz. Çoğu zaman 4'ü seçtim:
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: ✅
Kodu derinlemesine incelemek isterseniz bu yazı için oluşturduğum GitHub deposuna [4] göz atabilirsiniz.
Sonuç: Ne Öğrendiniz?
- Docker ile bir dbt projesi nasıl kurulur;
- dbt için bir veri kaynağı hazırlama nasıl yapılandırılır: burada, dockerize edilmiş bir PostgreSQL veritabanı kullandık
- Veritabanında dönüşümler nasıl yürütülür ve çalışıp çalışmadığı kontrol edilir.
[1] dbt Docker resmi
[2] Airbyte Documentation'dan veri örnekleri
[3] dbt Documentation'dan Postgres eklentisi
[4] Proje deposu , GitHub'da
Seviye Atlama Kodlama
Topluluğumuzun bir parçası olduğunuz için teşekkürler! Gitmeden önce:
- Hikaye için alkışlayın ve yazarı takip edin
- Seviye Atlama Kodlama yayınında daha fazla içerik görüntüleyin
- Ücretsiz kodlama mülakat kursu ⇒ Kursu Görüntüle
- Bizi takip edin: Twitter | LinkedIn | Bülten

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































