Ana içeriğe geç

dbt-utils Paketine Giriş

dbt-utils’ın, hazır makrolar, temel özellikler ve pratik kullanım senaryolarıyla dbt’i nasıl geliştirdiğini öğrenin. Adım adım rehberimizle veri dönüşümlerinizi kolaylaştırın.
Austin Chia
Austin Chia

Ücretsiz Hesabınızı Oluşturun

Alıştırma and program your progress.

Google ile devam edinDevam ederek, Kullanım Koşullarımızı ve Gizlilik Politikamızı kabul etmiş ve verilerinizin ABD'de saklandığını onaylamış olursunuz.

dbt-utils paketi, veri dönüşüm süreçlerinizi basitleştiren ve geliştiren güçlü bir araç setidir. Bu rehberde, sık kullanılan SQL işlemleri için hazır makrolarıyla iş akışınızı nasıl hızlandırabileceğini göstererek dbt-utils’ı tanıtacağız.

dbt-utils nedir?

dbt-utils paketi

dbt-utils, dbt içinde projelerin işlevselliğini artıran, önceden oluşturulmuş makrolardan oluşan bir araç takımı sağlayan bir pakettir. dbt-utils, soyutlama katmanları ekleyerek karmaşıklığı azaltır; böylece daha verimli ve tutarlı veri dönüşümü sağlar.

Eğer Python’daki kütüphanelere ve R’deki paketlere aşinaysanız, dbt-utils buna benzer bir yapı sunar.

Sık kullanılan Structured Query Language (SQL) işlemleri için standartlaştırılmış bu makrolar sayesinde tüm dönüşümleri sıfırdan kodlamanın zorluğu ortadan kalkar.

Bu yardımcıları kullanmak, topluluk tarafından onaylanmış bir dizi makroyu projelerinize entegre ederek tekerleği yeniden icat etmenizi önler; bakım kolaylığını artırır ve en iyi uygulamalar kültürünü teşvik eder.

Temel özellikler ve işlevler

dbt-utils, veri dönüşümünü daha verimli ve düzenli hale getiren çeşitli özellikler ve işlevler sunar. Bunlar şunları içerir:

1. Standartlaştırılmış makrolar

dbt-utils, Jinja şablonlama kullanarak birleştirme, toplulaştırma, filtreleme ve daha fazlası gibi yaygın SQL işlemleri için geniş bir hazır makro yelpazesi sunar.

Bu makrolar, projeler arasında tutarlılığı sağlamak ve tekrarlayan kodlamaya olan ihtiyacı azaltmak için standartlaştırılmıştır.

Örneğin, analitik mühendisleri tarafından kullanılan bazı makrolar şunlardır:

  • date_spine: Belirlenen iki tarih arasında kesintisiz bir tarih dizisi oluşturur; zaman serisi analizi için kullanışlıdır.
  • pivot: Satırları dinamik olarak sütunlara dönüştürür, çapraz tablo işlemlerini basitleştirir.
  • star: Modeldeki belirtilen tablolardan tüm alanları, except argümanındakiler hariç olacak şekilde alır.
  • union_relations: Aynı yapıya sahip birden fazla ilişkideki veriyi union all ile birleştirir.
  • generate_series: Sayısal bir dizi oluşturur; zaman serisi analizi için pratiktir.
  • surrogate_key: Birden çok alanı birleştirerek satırlar için benzersiz bir tanımlayıcı üretir.

Bu makrolarla SQL, aksi halde karmaşık ve tekrarlı olan görevleri gerçekleştirebilir.

2. Şema ve dokümantasyon desteği

dbt-utils, veri modelleri içinde şemaları ve dokümantasyonu yönetmek için faydalı araçlar sunar. Bu, değişiklikleri takip etmeyi ve projelerde düzeni korumayı kolaylaştırır.

4. Test etme yetenekleri

dbt-utils ile kullanıcılar, veri dönüşümlerinin doğruluğunu ve kalitesini sağlamak için kolayca testler yazabilir. Bu testler otomatikleştirilebilir ve sürekli entegrasyon süreçlerine entegre edilebilir; böylece daha verimli ve güvenilir veri hatları oluşturulur.

Neden dbt-utils Kullanmalı?

Peki, neden bu paketi kullanmalısınız?

Önce bazı faydalarına bakalım:

  1. Karmaşık SQL’i basitleştirir: Makroların kullanımıyla dbt-utils, karmaşık SQL sorgularının yazılmasını kolaylaştırır. Bu, veri analistleri ve mühendisleri için zaman ve emek tasarrufu sağlar; kodda boğulmak yerine daha üst düzey analizlere odaklanmalarına imkân tanır.
  2. Verimli dokümantasyon: Daha önce belirtildiği gibi, dbt-utils dokümantasyonu otomatik olarak oluşturmaya yardımcı olabilir.
  3. Artan kalite kontrolü: Veri hatlarına test yetenekleri ekleyerek dbt-utils, veri dönüşümlerinin doğruluğunu ve güvenilirliğini sağlamaya yardımcı olur.
  4. Otomatik veri doğrulama: dbt-utils ile veri doğrulama otomatikleştirilebilir ve geliştirme sürecine entegre edilebilir. Bu sayede veri modellerinde yapılan değişiklikler anında doğrulanır ve olası sorunlar erken aşamada yakalanır.
  5. Açık kaynak: dbt-utils açık kaynaklıdır; bu sayede pek çok geliştirici paketin geliştirilmesine katkıda bulunabilir. Bu da paketin sürekli güncelleneceği anlamına gelir.

dbt-utils Kurulumu ve Yapılandırması

Aşağıda dbt-utils paketinin veri iş akışınıza nasıl dahil edilebileceğine bakalım.

Önkoşullar

dbt-utils’ı kullanmadan önce SQL’e aşinalık ve dbt (data build tool) temel prensiplerini anlama zorunludur. Halihazırda başlatılmış ve yapılandırılmış bir dbt projeniz olmalıdır.

Tazeleme ihtiyacınız varsa, Introduction to dbt kursumuza ve dbt öğreticisine göz atabilirsiniz.

Ayrıca, dbt core sürümünüz ile dbt-utils paketi arasında net bir sürüm uyumu gereklidir. Çakışmaları veya kullanım dışı işlevleri önlemek için dbt sürümleri arasındaki uyumluluğu kontrol etmeniz önerilir.

Adım adım kurulum

dbt-utils’ı veri yığınına entegre etmeye başlamak için önce geliştirme ortamınızın doğru şekilde kurulduğundan emin olun.

Adım 1: dbt’yi kurun

Önce, ortamınıza dbt’nin kurulu olduğundan emin olun. dbt’yi pip ile kurabilirsiniz:

pip install dbt

Adım 2: dbt-utils’ı dbt projenize ekleyin

dbt-utils’ı kurmak için, dbt proje kök dizininizdeki packages.yml dosyasına aşağıdakileri ekleyin.

Bu dosya yoksa dbt proje kökünde oluşturun ve şunları ekleyin:

packages:
- package: dbt-labs/dbt_utils
version: "1.1.1" # Use the latest version compatible with your dbt version

Bu yaml dosyasında gerekli paket sürümünü de belirteceksiniz. Kurulu dbt sürümünüzle uyumlu en güncel sürümü kullandığınızdan emin olun.

Adım 3: Paketi kurun

Değişikliklerden sonra kurulum yalnızca bir komut uzağınızda.

Bu komutun başarıyla çalışması dbt-utils’ı indirip kuracak ve gelişmiş işlevler için sizi hazırlayacaktır.

dbt proje dizininizde terminalden şu komutu çalıştırın:

dbt deps

Bu komut, packages.yml”a listelenen tüm paketleri kurar.

dbt-utils’ın Temel Yardımcıları ve Uygulamaları

dbt-utils paketi, dbt projelerinde SQL dönüşümlerini kolaylaştıran yaygın yardımcı işlevlerden oluşan bir set sağlar.

Bu işlevler, geliştiricilerin tekrara düşmesini önlemeye ve benzersiz iş mantıklarına odaklanmalarına yardımcı olur.

dbt-utils’taki bazı işlevler şunlardır:

1. SQL üreticileri

dbt-utils’taki SQL üreticileri, modüler SQL kodu oluşturmak için kullanışlıdır.

Örneğin, deduplicate makroları, verinin sırasını korurken yinelenen satırları ortadan kaldırmak için idealdir. Yinelenenler, modellerden, tablolardan ve hatta Common Table Expression (CTE)’lerden kaldırılabilir.

2. Genel testler

Genel testler, bir tablo veya görünümdeki veriyi doğrulamak için kullanılır. Belirli gereksinimlere uyacak şekilde kolayca özelleştirilebilir ve işlenen verinin kalitesi hakkında değerli içgörüler sağlar.

Örneğin, expression_is_true makrosu belirli bir ifadenin doğru olup olmadığını kontrol eder. Bu esnek biçimde şu koşulları doğrulamak için kullanılabilir:

  • Sütun uzunluğu
  • Belirli bir temel cebirsel işlemin çıktısı

3. Jinja yardımcıları

Jinja yardımcıları, kullanıcı girdisine veya değişken verilere göre kolayca özelleştirilebilen dinamik SQL sorguları oluşturmak için kullanışlıdır. SQL ifadeleri içinde koşullu mantık ve döngülere izin verirler.

Jinja şablonları, bu makroları tanımlamak ve belirtmek için kullanılır.

Bir örnek, geçerli zaman damgasının bir dizesini döndüren pretty_time makrosudur.

4. Web makroları

Web makroları, Jinja yardımcılarına benzer ancak özellikle web tabanlı projeler için tasarlanmıştır. Dinamik HTML üretimi ve işlenmesine olanak tanır; etkileşimli ve duyarlı web sayfalarını oluşturmayı kolaylaştırır.

Kullanışlı bir makro, URL’nin sayfa yolunu alan get_url_path makrosudur. Sözdizimi şu şekildedir:

{{ dbt_utils.get_url_path(field='page_url') }}

5. İçe dönük (introspektif) makrolar

İçe dönük makrolar, mevcut kapsam içindeki verilere erişebilen ve onları işleyebilen makrolardır. Bu, dinamik ve verimli veri işleme sağlar; ek işlev veya koda duyulan ihtiyacı azaltır.

Bir örnek, sorgu sonuçlarını bir nesne olarak döndüren get_column_values makrosudur.

dbt-utils’ın Pratik Kullanım Senaryoları

Kullanım senaryosu 1: Karmaşık sorguları basitleştirme

Örnek senaryo: Bir şirketin müşteri bilgileri, işlem verileri ve ürün verilerini içeren büyük bir veri kümesi var. Geçen çeyrekte her ürün kategorisi için toplam satışları gösteren bir rapor oluşturmaları gerekiyor.

Birden fazla tabloyu birleştirmek ve her kategori için satışları hesaplamak için karmaşık SQL sorguları yazmak yerine, ilgili verileri kolayca çıkarmak ve makroları veya modelleri içinde işlemek için dbt-utils kullanabilirler.

Örneğin, ürün verileriyle ilgili yalnızca gerekli sütunları filtrelemek için get_filtered_columns_in_relation kullanılabilir ve ardından her kategori için toplam satışları hesaplamak üzere sum makrosu kullanılabilir.

Bu, süreci basitleştirir ve daha verimli hale getirir; zaman kazandırır ve hataları azaltır.

Kod uygulaması:

Bu çözümü bir örnek veritabanında uygulamak için şu adımları izleyebilirsiniz:

get_filtered_columns_in_relation makrosunu kullanarak ürün verilerinden yalnızca gerekli sütunları filtreleyin. Bu makro, ilgili sütunları verimli bir şekilde seçmenize yardımcı olacaktır.

-- models/product_data_filtered.sql
with product_data as (
select
{{ dbt_utils.get_filtered_columns_in_relation(
relation=ref('products'),
include=['product_id', 'category']
) }}
from {{ ref('products') }}
)
select * from product_data

Ardından, ürün, işlem ve müşteri verilerini birleştiren bir model oluşturun. Sonra, geçen çeyrekte her ürün kategorisi için toplam satışları hesaplamak üzere sum işlevini kullanın.

-- models/total_sales_by_category.sql
with product_data as (
select
{{ dbt_utils.get_filtered_columns_in_relation(
relation=ref('products'),
include=['product_id', 'category']
) }}
from {{ ref('products') }}
),
transaction_data as (
select
product_id,
sale_amount,
transaction_date
from {{ ref('transactions') }}
where transaction_date >= date_trunc('quarter', current_date) - interval '1 quarter'
),
joined_data as (
select
p.category,
t.sale_amount
from product_data p
join transaction_data t
on p.product_id = t.product_id
)
select
category,
sum(sale_amount) as total_sales
from joined_data
group by category

Modelleri tanımladıktan sonra dönüşümleri çalıştırmak ve raporu oluşturmak için dbt modellerini çalıştırın.

dbt run

Yukarıdaki kodun açıklaması:

get_filtered_columns_in_relation makrosu, products tablosundan yalnızca gerekli sütunların (product_id ve category) seçilmesine yardımcı olur ve veri setini basitleştirir.

Sonrasında, filtrelenmiş ürün verileri, her ürün için satış tutarlarını elde etmek amacıyla SQL ile işlem verileriyle birleştirilir. Ardından, sum toplulaştırma işlevi kullanılarak son çeyrek içinde her ürün kategorisi için toplam satışlar hesaplanır.

Kullanım senaryosu 2: Genel testlerle veri kalitesini sağlama

Örnek senaryo:

Bu kullanım senaryosunda, Kullanım Senaryosu 1’deki aynı örnek veri kümesiyle çalışmaya devam edeceğiz. Ancak bir rapor oluşturmaktansa, hedefimiz veriye genel testler çalıştırarak veri kalitesini sağlamak olacak.

Kod uygulaması:

Aşağıda bu testleri veri kümeniz için nasıl uygulayacağınıza dair örnekler yer alıyor:

1. Boş değer oranını test etme

Bu genel testte, yalnızca belirlediğimiz boş olmayan oranına uyan değerleri kabul edeceğiz. Bunu not_null_proportion testiyle yapacağız.

# models/products.yml
version: 2
models:
- name: products
columns:
- name: product_id
tests:
- dbt_utils.not_null_proportion:
at_least: 0.95

Bu örnekte, boş olmayan oranını en az 0,95 olacak şekilde ayarlamak için isteğe bağlı bir at_least argümanı ekledik.

2. Boş alanları test etme

Bu örnekte, product_id alanındaki boş dizeleri kontrol etmek için not_empty_string testini kullanacağız.

# models/products.yml
version: 2
models:
- name: products
columns:
- name: product_id
tests:
- dbt_utils.not_empty_string

3. İlişkisel bütünlüğü test etme

relationships_where işlevinin kullanılması, transactions tablosundaki her product_id değerinin products tablosunda bulunduğunu garanti eder.

# models/transactions.yml
version: 2
models:
- name: transactions
columns:
- name: product_id
tests:
- dbt_utils.relationships_where:
to: ref('products')
field: product_id

Bu örnekte, transactions tablosundaki tüm product_id değerlerinin   tablosundaki geçerli kayıtlara karşılık geldiğinden emin oluyoruz. Bu, temel bir ilişki bütünlüğü kontrolüdür.

Birden fazla testi aynı anda birleştirerek çeşitli bütünlük kontrollerini birlikte kapsayabileceğinizi unutmayın.

Tüm testler yaml yapılandırma dosyanızda tanımlandıktan sonra, tanımlı tüm şema testlerini çalıştırmak için dbt test komutunu kullanın.

dbt test

dbt-utils En İyi Uygulamalar

dbt-utils’ı verimli biçimde kullanma

dbt kullanırken, projenizin verimli ve etkili bir şekilde çalışmasını sağlamak için en iyi uygulamaları takip etmek önemlidir. dbt-utils kullanırken akılda tutulması gereken bazı temel noktalar şunlardır:

  1. Testleri ayrı ayrı tanımlamak yerine birleştirin: Daha önce belirtildiği gibi, birden fazla testi tek bir test ifadesinde birleştirebilirsiniz. Bu, tekrarı azaltır ve projenizin genel performansını iyileştirir.
  2. Vekil anahtarlar oluştururken dbt_utils.surrogate_key makrosunu kullanın: Bu makro, tablonuzdaki diğer sütunlara dayanarak vekil anahtarları otomatik olarak üretir; zamandan ve emekten tasarruf sağlar.

Yaygın tuzaklar ve bunlardan kaçınma yolları

İşte dbt-utils kullanırken kullanıcıların karşılaşabileceği yaygın tuzaklar ve bunlardan kaçınmaya yönelik ipuçları:

  1. Özel makroların doğru yapılandırılmaması: Kendi özel makrolarınızı oluşturuyorsanız, projeye dahil etmeden önce bunların doğru yapılandırıldığından ve test edildiğinden emin olun.
  2. dbt-utils’ın en son sürümüne güncellememek: Yeni özelliklerden ve hata düzeltmelerinden yararlanmak için dbt-utils’ı düzenli olarak en son sürüme güncellemek önemlidir.

Sonuç

dbt-utils, veri modelleme sürecinizde görevleri kolaylaştırmak, test etmek ve otomatikleştirmek için güçlü bir araçtır. dbt kullanımının vazgeçilmez bir parçasıdır ve veri modellerinizi geliştirirken size zaman ve emek kazandırabilir.

Şu dbt öğreticisi veya şu alternatif veri mühendisliği araçları listesi de faydalı olabilir.

dbt ile çalışmaya başlamak istiyor ve daha fazla öğrenme fırsatı arıyorsanız, Introduction to dbt Course kursumuzu da inceleyin!

Austin Chia

Yazar

Austin Chia

Ben Austin, sağlık sektöründe veri bilimci ve veri analisti olarak yıllara dayanan deneyime sahip bir blogger ve teknoloji yazarıyım. Biyoloji geçmişiyle başladığım teknoloji yolculuğumda, şimdi teknoloji blogum aracılığıyla başkalarının da aynı geçişi yapmasına yardımcı oluyorum. Teknolojiye olan tutkum, onlarca SaaS şirketine yazılı katkılar sunmama, başkalarına ilham vermeme ve deneyimlerimi paylaşmama vesile oldu.

Konular

İlgili