Ham CSV’lerden Kamu Veri Ürününe: dbt ve DuckDB ile Veri Mühendisliği Serüveni
CSV’lerden temiz, güvenilir ve paylaşılabilir veri ürünleri oluşturmak artık çok daha kolay. dbt (data build tool) ve DuckDB ikilisiyle modern veri mühendisliği pratiklerini keşfedin, süreçlerinizi otomatikleştirin ve veri kalitenizi artırın. Bu makalede, ham verilerden anlamlı içgörüler elde etmenizi ve bunları bir veri ürününe dönüştürmenizi sağlayacak adım adım bir rehber sunacağız.
Veri Mühendisliğinde Yeni Bir Dönem: Neden dbt ve DuckDB İkilisini Tercih Etmeliyiz?
Günümüz iş dünyasında veri, adeta yeni petrol olarak kabul ediliyor. Ancak ham petrolün doğrudan kullanılamaması gibi, ham veriler de çoğu zaman karmaşık, dağınık ve kirli bir halde bulunur. Bu ham verileri anlamlı içgörülere dönüştürmek, güvenilir raporlar oluşturmak veya yapay zeka modellerini beslemek için kapsamlı bir işleme ve dönüşüm sürecinden geçirmek gerekir. Geleneksel veri ambarı (data warehouse) kurulumları genellikle yüksek maliyetli, karmaşık ve uzun süreli projeler gerektirirken, özellikle küçük ve orta ölçekli ekipler veya bireysel geliştiriciler için daha çevik ve uygun maliyetli çözümlere ihtiyaç duyulmaktadır. İşte tam da bu noktada, dbt ve DuckDB ikilisi modern veri mühendisliğine yeni bir soluk getiriyor.
dbt (data build tool), SQL tabanlı veri dönüşümlerini otomatikleştiren, sürüm kontrolüne uygun, test edilebilir ve dokümante edilebilir veri modelleri oluşturmanızı sağlayan güçlü bir araçtır. Geleneksel ETL (Extract, Transform, Load) süreçlerindeki “Transform” (dönüşüm) adımını merkeze alarak, veriyi doğrudan bir veri ambarı içinde dönüştürmeyi (ELT – Extract, Load, Transform) teşvik eder. Bu sayede, veri analistleri ve mühendisleri, karmaşık veri boru hatları (data pipelines) kurmak yerine, iş mantığını doğrudan SQL ile ifade edebilir ve yazılım geliştirme pratiklerini veri dünyasına taşıyabilirler. dbt’nin modüler yapısı, veri modellerini katmanlara ayırarak yönetmeyi kolaylaştırır ve veri yaşam döngüsü boyunca şeffaflık sağlar.
DuckDB ise, özellikle analitik iş yükleri için tasarlanmış, süreç içi (in-process) çalışan, hızlı ve kurulum gerektirmeyen bir OLAP (Online Analytical Processing) veritabanıdır. Python, R, Java gibi dillerle kolayca entegre olabilir ve doğrudan dosya sisteminden CSV, Parquet gibi formatlardaki verileri sorgulayabilir. Büyük veri kümeleri üzerinde bile şaşırtıcı derecede yüksek performans sunması, onu yerel veri analizi, prototipleme ve dbt gibi araçlarla birlikte hafif bir veri ambarı çözümü olarak ideal bir aday haline getirir. Geleneksel veri ambarlarının aksine, DuckDB’nin sunucu kurulumu veya yönetimi gerektirmemesi, geliştiricilerin odaklarını veri dönüşümüne ve analizine kaydırmalarına olanak tanır. Bu iki aracın birleşimi, veri mühendisliği süreçlerini demokratikleştirerek, her seviyeden kullanıcının güçlü ve güvenilir veri ürünleri oluşturmasına kapı aralar.
DuckDB: Masaüstünüzde Yüksek Performanslı Bir Veri Ambarı
DuckDB, modern veri yığını (data stack) içinde hızla popülerlik kazanan, yenilikçi bir analitik veritabanıdır. Geleneksel veritabanlarının aksine, DuckDB “süreç içi” (in-process) çalışan bir OLAP veritabanıdır; yani ayrı bir sunucu süreci gerektirmez, kullandığınız uygulama (örneğin Python betiği) içinde doğrudan çalışır. Bu mimari, onu özellikle yerel (local) veri analizi, prototipleme ve dbt gibi araçlarla entegre bir şekilde veri dönüşümü için son derece uygun hale getirir. DuckDB’nin en çarpıcı özelliklerinden biri, büyük veri kümeleri üzerinde bile inanılmaz derecede yüksek sorgu performansıdır. Bunu, sütun tabanlı depolama (columnar storage) ve vektörleştirilmiş sorgu işleme (vectorized query processing) gibi gelişmiş optimizasyon teknikleri sayesinde başarır.
DuckDB’nin sunduğu başlıca avantajlar şunlardır:
- Sıfır Kurulum ve Yönetim: Ayrı bir sunucu kurmaya, yapılandırmaya veya bakımını yapmaya gerek yoktur. Basit bir kütüphane olarak projenize dahil edilebilir. Bu, özellikle küçük ekipler veya bireysel geliştiriciler için büyük bir kolaylık sağlar.
- Yüksek Performans: Analitik sorgular için özel olarak optimize edilmiştir. Sütun tabanlı yapısı sayesinde, yalnızca sorguda ihtiyaç duyulan sütunları okuyarak I/O (giriş/çıkış) maliyetlerini minimize eder ve çok daha hızlı sonuçlar verir.
- SQL Uyumluluğu: Standart SQL’i destekler, bu da mevcut SQL bilginizi doğrudan kullanabileceğiniz anlamına gelir. Ayrıca, karmaşık analitik fonksiyonlar ve pencere fonksiyonları gibi gelişmiş SQL özelliklerini de sunar.
- Doğrudan Dosya Okuma: CSV, Parquet, JSON gibi popüler dosya formatlarını doğrudan diskinizden okuyabilir ve sanki bir veritabanı tablosuymuş gibi sorgulayabilir. Bu özellik, ham verileri hızlıca keşfetmek ve dönüştürmek için paha biçilmezdir. Örneğin,
SELECT * FROM 'veri.csv';komutuyla bir CSV dosyasını anında sorgulayabilirsiniz. - Hafif ve Taşınabilir: Veritabanı genellikle tek bir dosya olarak depolanır, bu da onu kolayca taşıyabileceğiniz veya sürüm kontrol sistemlerine dahil edebileceğiniz anlamına gelir.
Gerçek dünya senaryolarında DuckDB, bir veri bilimcinin büyük bir CSV dosyasını hızlıca analiz etmesinden, bir veri mühendisinin dbt ile karmaşık veri dönüşümlerini yerel olarak test etmesine kadar geniş bir kullanım alanına sahiptir. Örneğin, bir kamu kurumunun aylık olarak yayınladığı yüz binlerce satırlık toplu taşıma verilerini, DuckDB kullanarak saniyeler içinde özetleyebilir, en yoğun hatları veya saatleri belirleyebilirsiniz. Geleneksel bir SQL veritabanı kurmak saatler alabilirken, DuckDB ile bu süreci dakikalara indirebilirsiniz. Bu yetenekleri, onu modern veri mühendisliği ve analitik iş akışları için vazgeçilmez bir araç haline getirir.
dbt ile Veri Dönüşümünüzü Otomatize Edin: Modern ELT ve SQL’in Gücü
dbt (data build tool), modern veri yığınının temel taşlarından biri haline gelmiş, veri dönüşümlerini yönetmek için geliştirilmiş güçlü bir araçtır. Geleneksel ETL (Extract, Transform, Load) yaklaşımının aksine, dbt ELT (Extract, Load, Transform) felsefesini benimser. Bu yaklaşımda, ham veriler öncelikle olduğu gibi bir veri ambarına (bu senaryoda DuckDB) yüklenir ve dönüşüm mantığı veritabanının içinde, SQL kullanarak uygulanır. Bu, veri mühendislerine ve analistlere daha fazla esneklik ve kontrol sağlar, çünkü veritabanının işlem gücünden yararlanılır ve dönüşümler doğrudan veri ambarında gerçekleştiği için performans artışı sağlanır.
dbt’nin temel gücü, yazılım geliştirme pratiklerini veri dünyasına taşımasından gelir. SQL’i modüler, sürüm kontrolüne uygun ve test edilebilir bir şekilde yazmanızı sağlar. dbt projeleri genellikle bir dizi SQL dosyası ve YAML yapılandırma dosyasından oluşur. Her bir SQL dosyası, veri ambarınızdaki bir “modeli” temsil eder; bu model bir görünüm (view) veya bir tablo (table) olabilir. Bu modeller, birbirine bağımlılıklar aracılığıyla bağlanır ve dbt, bu bağımlılıkları otomatik olarak çözerek doğru sırayla çalıştırır. Örneğin, bir satış verisi modelini oluşturan SQL dosyası, önce müşteri verileri modelinin çalıştırılmasını gerektirebilir. dbt’nin ref() fonksiyonu, bu bağımlılıkları basit ve okunabilir bir şekilde tanımlamanızı sağlar.
dbt’nin sunduğu temel özellikler ve avantajlar şunlardır:
- SQL-First Yaklaşım: Veri dönüşümlerini standart SQL ile yazarsınız. Bu, mevcut SQL bilginizi doğrudan kullanabileceğiniz ve yeni bir dil öğrenme ihtiyacını ortadan kaldırabileceğiniz anlamına gelir.
- Modülerlik ve Yeniden Kullanılabilirlik: Her bir veri dönüşümü ayrı bir SQL dosyası olarak tanımlanır. Bu modeller, diğer modeller tarafından referans alınabilir, böylece karmaşık dönüşümler küçük, yönetilebilir parçalara ayrılır ve kod tekrarı azalır.
- Sürüm Kontrolü: Tüm dbt projesi (SQL ve YAML dosyaları) Git gibi sürüm kontrol sistemleriyle yönetilebilir. Bu, değişiklikleri takip etmenizi, geri almanızı ve ekip içinde işbirliği yapmanızı kolaylaştırır.
- Testler ve Veri Kalitesi: dbt, veri modelleriniz üzerinde otomatik testler tanımlamanıza olanak tanır. Örneğin, bir sütunun boş olmaması (
not_null) veya benzersiz değerler içermesi (unique) gibi kısıtlamaları test edebilirsiniz. Bu, veri kalitesini güvence altına almanın ve veri ürünlerinizin güvenilirliğini artırmanın kritik bir adımıdır. - Dokümantasyon: dbt, veri modellerinizi, sütunlarınızı ve testlerinizi kolayca dokümante etmenizi sağlar.
dbt docs generatekomutuyla etkileşimli bir veri kataloğu oluşturabilir, böylece veri varlıklarınızı keşfetmeyi ve anlamayı kolaylaştırırsınız. - Jinja Templating: SQL dosyaları içinde Jinja şablonlama dilini kullanabilirsiniz. Bu, dinamik SQL oluşturmanıza, makrolar tanımlamanıza ve daha gelişmiş programatik dönüşümler yapmanıza olanak tanır. Örneğin, farklı ortamlara (geliştirme, üretim) göre farklı şema adları kullanabilirsiniz.
Özetle, dbt, veri dönüşüm süreçlerinizi otomatikleştiren, standartlaştıran ve bir yazılım projesi gibi yönetmenizi sağlayan bir araçtır. DuckDB ile birleştiğinde, yerel ve hızlı bir veri ambarı üzerinde güçlü, test edilebilir ve dokümante edilmiş veri ürünleri oluşturmak için mükemmel bir kombinasyon sunar. Bu ikili, veri mühendisliği süreçlerini daha çevik, şeffaf ve güvenilir hale getirerek, ham verilerden elde edilen değerin maksimize edilmesine yardımcı olur.
Pratik Uygulama: Ham CSV Verilerini Hazırlama ve dbt Projesi Kurulumu
Şimdi, teoriden pratiğe geçelim ve ham CSV verilerimizi dbt ile işlemek için bir proje oluşturalım. Bu bölümde, örnek bir CSV dosyasını ele alacak, dbt projemizi kuracak ve DuckDB’yi veri ambarı olarak yapılandıracağız. Amacımız, ham verileri bir dbt projesine entegre etmek ve ilk dönüşüm adımlarına zemin hazırlamaktır.
Adım 1: Örnek CSV Verisi Hazırlama
Herhangi bir gerçek dünya senaryosunu taklit etmek için basit bir CSV dosyası oluşturalım. Örneğin, bir şehirdeki kütüphane ödünç verme kayıtlarını içeren bir dosya düşünelim. Bu dosyayı data/library_loans.csv olarak kaydedelim:
id,book_title,author,borrower_id,loan_date,return_date
1,Sefiller,Victor Hugo,101,2023-01-05,2023-01-20
2,Suç ve Ceza,Fyodor Dostoyevski,102,2023-01-07,2023-01-22
3,Don Kişot,Miguel de Cervantes,101,2023-01-10,
4,Hamlet,William Shakespeare,103,2023-01-12,2023-01-27
5,1984,George Orwell,104,2023-01-15,
Gördüğünüz gibi, bazı return_date değerleri eksik (NULL). Bu, veri temizleme adımları için iyi bir örnek teşkil edecektir.
Adım 2: dbt ve DuckDB Kurulumu
Öncelikle, sisteminizde Python ve pip kurulu olduğundan emin olun. Ardından dbt ve DuckDB adaptörünü kuralım:
pip install dbt-duckdb
Adım 3: Yeni Bir dbt Projesi Oluşturma
Komut satırında projemizi oluşturalım:
dbt init library_data_product
Bu komut, library_data_product adında yeni bir dizin oluşturacak ve içinde temel dbt proje yapısını kuracaktır.
Adım 4: DuckDB ile Profil Yapılandırması
dbt’nin DuckDB’yi kullanabilmesi için bir profiles.yml dosyası yapılandırmamız gerekiyor. Bu dosya genellikle kullanıcının ana dizininde (~/.dbt/profiles.yml) bulunur. Eğer yoksa oluşturun ve aşağıdaki içeriği ekleyin:
library_data_product:
target: dev
outputs:
dev:
type: duckdb
path: './dbt_duckdb.duckdb' # Veritabanı dosyasının dbt projesi içinde oluşturulmasını sağlar
schema: public # Varsayılan şema adı
Burada library_data_product, dbt projemizin adıyla eşleşen profil adımızdır. type: duckdb, dbt’ye DuckDB kullanacağımızı söyler. path: './dbt_duckdb.duckdb' ise DuckDB veritabanı dosyasının projemizin kök dizininde oluşturulacağını belirtir. Bu, veritabanının taşınabilirliğini ve proje ile birlikte yönetilmesini kolaylaştırır.
Adım 5: dbt Projesini DuckDB Profiline Bağlama
library_data_product dizinine gidin ve dbt_project.yml dosyasını açın. profile: 'library_data_product' satırının doğru şekilde ayarlandığından emin olun. Genellikle dbt init bu ayarı otomatik yapar:
name: 'library_data_product'
version: '1.0.0'
config-version: 2
profile: 'library_data_product' # Burası profil adınızla eşleşmeli
model-paths: ["models"]
analysis-paths: ["analyses"]
test-paths: ["tests"]
seed-paths: ["data"] # CSV dosyalarımızın bulunduğu dizin
macro-paths: ["macros"]
snapshot-paths: ["snapshots"]
target-path: "target"
clean-targets:
- "target"
- "dbt_packages"
models:
library_data_product:
+materialized: view
seed-paths: ["data"] satırını eklediğimizden emin olun. Bu, dbt’nin data dizini altındaki CSV dosyalarını “seed” (tohum) olarak kullanabileceğini belirtir.
Adım 6: CSV Verilerini dbt Seed Olarak Yükleme
Oluşturduğumuz library_loans.csv dosyasını dbt projemizin kök dizinindeki data klasörüne taşıyın. Ardından, komut satırında projemizin kök dizininde şu komutu çalıştırın:
dbt seed
Bu komut, data dizinindeki tüm CSV dosyalarını DuckDB veritabanına tablolar olarak yükleyecektir. Artık library_loans adında bir tablomuz DuckDB içinde mevcut.
Adım 7: Kaynak Verileri Tanımlama (Opsiyonel ama Önemli)
dbt’nin veri kaynaklarınızı anlaması ve dokümante etmesi için models dizini altında (örneğin models/sources.yml) kaynaklarınızı tanımlamak iyi bir pratiktir:
version: 2
sources:
- name: raw_data # Kaynak sistem veya veri alanı adı
database: dbt_duckdb # profiles.yml'deki veritabanı adı (DuckDB için genelde path'in adı)
schema: public # profiles.yml'deki şema adı
tables:
- name: library_loans # Seed olarak yüklediğimiz tablonun adı
description: "Ham kütüphane ödünç verme kayıtları."
columns:
- name: id
description: "Ödünç verme kaydının benzersiz kimliği."
tests:
- unique
- not_null
- name: book_title
description: "Ödünç alınan kitabın başlığı."
- name: author
description: "Kitabın yazarı."
- name: borrower_id
description: "Ödünç alan kişinin kimliği."
- name: loan_date
description: "Kitabın ödünç alındığı tarih."
- name: return_date
description: "Kitabın iade edildiği tarih."
Bu yapılandırma, dbt’nin library_loans tablosunu bir kaynak olarak tanımasını sağlar ve üzerine testler tanımlamamıza olanak tanır. Artık ham verilerimiz DuckDB’de ve dbt projemiz dönüşüm için hazır durumda.
dbt Modelleri Oluşturma, Test Etme ve Dokümantasyon: Güvenilir Veri Ürünleri İçin Temel Adımlar
Ham verilerimizi dbt projemize başarıyla yükledikten sonra, sıra bu verileri anlamlı ve kullanışlı veri ürünlerine dönüştürmeye geldi. dbt, bu süreci “modeller” aracılığıyla yönetir. Modeller, genellikle farklı katmanlarda (staging, mart vb.) konumlandırılan SQL dosyalarıdır ve her biri belirli bir dönüşüm veya veri setini temsil eder. Ayrıca, oluşturduğumuz bu modellerin güvenilirliğini sağlamak için testler yazmak ve gelecekteki kullanımlar için dokümante etmek de kritik öneme sahiptir.
Adım 1: Staging Modelleri Oluşturma
Staging (hazırlık) katmanı, ham veriler üzerinde yapılan ilk temizlik ve standardizasyon adımlarını içerir. Bu, genellikle sütun adlarını standartlaştırma, veri tiplerini dönüştürme, gereksiz sütunları kaldırma veya basit hesaplamalar yapma gibi işlemleri kapsar. models/staging dizini altında bir dosya oluşturalım: models/staging/stg_library_loans.sql
-- models/staging/stg_library_loans.sql
SELECT
id AS loan_id,
book_title,
author,
borrower_id,
CAST(loan_date AS DATE) AS loan_date,
CAST(return_date AS DATE) AS return_date,
CASE
WHEN return_date IS NULL THEN TRUE
ELSE FALSE
END AS is_currently_borrowed
FROM {{ source('raw_data', 'library_loans') }}
Burada {{ source('raw_data', 'library_loans') }} ifadesi, dbt’nin sources.yml dosyasında tanımladığımız ham veri kaynağını referans almasını sağlar. CAST fonksiyonları ile veri tiplerini doğru formata dönüştürüyoruz ve CASE ifadesiyle yeni bir is_currently_borrowed (şu anda ödünçte mi?) sütunu oluşturuyoruz.
Adım 2: Mart Modelleri Oluşturma
Mart (iş analizi) katmanı, iş kullanıcılarının doğrudan tüketebileceği, iş mantığına göre zenginleştirilmiş ve genellikle toplanmış (aggregated) veri setlerini içerir. Bu katman, raporlama, gösterge panelleri (dashboards) veya veri analizi için kullanılır. models/marts dizini altında bir dosya oluşturalım: models/marts/dim_books.sql (kitap boyut tablosu) ve models/marts/fct_loan_summary.sql (ödünç özet bilgi tablosu).
models/marts/dim_books.sql:
-- models/marts/dim_books.sql
SELECT DISTINCT
book_title,
author
FROM {{ ref('stg_library_loans') }}
ORDER BY book_title
models/marts/fct_loan_summary.sql:
-- models/marts/fct_loan_summary.sql
SELECT
loan_id,
book_title,
author,
borrower_id,
loan_date,
return_date,
is_currently_borrowed,
(return_date - loan_date) AS loan_duration_days -- Ödünç süresi hesaplama
FROM {{ ref('stg_library_loans') }}
Burada {{ ref('stg_library_loans') }} ifadesi, dbt’nin daha önce oluşturduğumuz staging modelini referans almasını sağlar. dbt, bu bağımlılıkları otomatik olarak yönetir ve modelleri doğru sırayla çalıştırır.
Adım 3: dbt Modellerini Çalıştırma
Modellerimizi oluşturduktan sonra, onları çalıştırmak için projenizin kök dizininde şu komutu kullanın:
dbt run
Bu komut, bağımlılık sırasına göre tüm modellerinizi DuckDB içinde oluşturacaktır. Artık DuckDB veritabanınızda stg_library_loans, dim_books ve fct_loan_summary adında görünümler (views) veya tablolar (materialization tipine göre) bulunacaktır.
Adım 4: Veri Kalitesi İçin dbt Testleri
Veri ürünlerimizin güvenilirliğini sağlamak için testler yazmak çok önemlidir. models dizini altında (örneğin models/marts/schema.yml) testlerimizi tanımlayabiliriz:
version: 2
models:
- name: fct_loan_summary
description: "Kütüphane ödünç verme özet bilgileri."
columns:
- name: loan_id
description: "Ödünç verme kaydının benzersiz kimliği."
tests:
- unique
- not_null
- name: book_title
description: "Ödünç alınan kitabın başlığı."
tests:
- not_null
- name: loan_date
description: "Kitabın ödünç alındığı tarih."
tests:
- not_null
- name: loan_duration_days
description: "Kitabın ödünçte kaldığı gün sayısı."
tests:
- dbt_utils.at_least_one_true:
expression: "loan_duration_days >= 0 OR is_currently_borrowed = TRUE"
# Ödünç süresi negatif olamaz, ancak hala ödünçteyse NULL olabilir.
- relationships:
to: ref('dim_books')
field: book_title # book_title üzerinden dim_books ile ilişki
- name: dim_books
description: "Kütüphanedeki kitapların boyut tablosu."
columns:
- name: book_title
description: "Kitabın başlığı."
tests:
- unique
- not_null
- name: author
description: "Kitabın yazarı."
tests:
- not_null
Yukarıdaki örnekte, fct_loan_summary modelindeki loan_id‘nin benzersiz ve boş olmaması gerektiğini, book_title‘ın boş olmaması gerektiğini test ediyoruz. Ayrıca loan_duration_days için özel bir test (dbt_utils.at_least_one_true makrosunu kullanarak) tanımladık ve dim_books ile ilişki testini ekledik. Testleri çalıştırmak için:
dbt test
Herhangi bir test başarısız olursa, dbt size hangi verinin beklentileri karşılamadığını gösterecektir.
Adım 5: dbt Dokümantasyonu Oluşturma
Veri ürünlerinizin anlaşılabilirliğini artırmak için dokümantasyon hayati öneme sahiptir. schema.yml dosyalarında yaptığımız açıklamalar, dbt’nin otomatik olarak bir veri kataloğu oluşturmasını sağlar. Dokümantasyonu oluşturmak ve tarayıcınızda görüntülemek için:
dbt docs generate
dbt docs serve
dbt docs serve komutu, yerel bir web sunucusu başlatacak ve tarayıcınızda etkileşimli bir veri kataloğu gösterecektir. Bu katalog, modellerinizin bağımlılık grafiğini, sütun açıklamalarını, test sonuçlarını ve daha fazlasını içerir. Bu sayede, veri ürünleriniz hakkında bilgi edinmek isteyen herkes, kolayca erişilebilir ve güncel bir kaynağa sahip olur. Tüm bu adımlar, ham CSV’lerden başlayarak, güvenilir, test edilmiş ve iyi dokümante edilmiş veri ürünleri oluşturma sürecinin temelini oluşturur.
Kamu Veri Ürününe Dönüşüm: Çıktıları Paylaşma ve Erişilebilir Kılma Stratejileri
dbt ve DuckDB kullanarak ham CSV verilerimizi temizledik, dönüştürdük, test ettik ve dokümante ettik. Şimdi, bu işlenmiş ve güvenilir veri setlerini “kamu veri ürünü” haline getirerek, iç veya dış paydaşların kullanımına sunma zamanı. Bir veri ürünü, sadece bir veri seti olmaktan öte, belirli bir ihtiyacı karşılamak üzere tasarlanmış, iyi tanımlanmış, erişilebilir ve sürdürülebilir bir veri varlığıdır. Kamu veri ürünü ise, genellikle bir kurumun veya topluluğun geniş kitleler tarafından erişilebilen ve kullanılabilen verileri anlamına gelir. Bu bölümde, dbt ile oluşturduğumuz çıktıları nasıl paylaşabileceğimize dair stratejileri inceleyeceğiz.
1. Dönüştürülmüş Verileri Yeni CSV/Parquet Dosyaları Olarak Dışa Aktarma
En basit ve doğrudan yöntemlerden biri, dbt tarafından oluşturulan nihai modelleri (örneğin fct_loan_summary veya dim_books) tekrar dosya formatlarına (CSV, Parquet) dönüştürmektir. DuckDB’nin bu konuda yerleşik yetenekleri vardır. dbt’nin kendi dışında, DuckDB’ye bağlanarak bu işlemi yapabilirsiniz:
-- Python ile DuckDB'ye bağlanıp dışa aktarma örneği
import duckdb
con = duckdb.connect(database='dbt_duckdb.duckdb', read_only=True)
# fct_loan_summary modelini CSV olarak dışa aktarma
con.execute("COPY (SELECT * FROM fct_loan_summary) TO 'output/fct_loan_summary.csv' (HEADER, DELIMITER ',');")
# dim_books modelini Parquet olarak dışa aktarma
con.execute("COPY (SELECT * FROM dim_books) TO 'output/dim_books.parquet' (FORMAT PARQUET);")
con.close()
Bu dosyalar daha sonra bir web sitesinde (örneğin bir belediyenin açık veri portalı), bir bulut depolama hizmetinde (AWS S3, Google Cloud Storage) veya bir FTP sunucusunda yayınlanabilir. Bu yöntem, özellikle statik veya periyodik olarak güncellenen veri ürünleri için etkilidir.
2. İş Zekası (BI) Araçları ile Entegrasyon
Dönüştürülmüş verileri doğrudan iş zekası araçlarına (Tableau, Power BI, Metabase, Looker Studio vb.) bağlamak, kullanıcıların verilerle etkileşimli olarak çalışmasını ve kendi raporlarını/gösterge panellerini oluşturmasını sağlar. DuckDB, birçok BI aracıyla doğrudan veya ODBC/JDBC sürücüleri aracılığıyla entegre olabilir. Eğer DuckDB veritabanı dosyası (dbt_duckdb.duckdb) paylaşılan bir ağ sürücüsünde veya bulut depolamada bulunuyorsa, BI araçları bu dosyaya bağlanarak canlı veri erişimi sağlayabilir. Bu, veri ürününüzü daha dinamik ve keşfedilebilir hale getirir.
3. Veri API’leri Oluşturma
Daha gelişmiş bir yaklaşım, dönüştürülmüş verilerinizin üzerine bir RESTful API (Uygulama Programlama Arayüzü) oluşturmaktır. Bu, diğer uygulamaların, web sitelerinin veya geliştiricilerin verilerinize programatik olarak erişmesini sağlar. Python’daki FastAPI veya Flask gibi framework’ler, DuckDB’den veri çeken ve JSON formatında yanıt veren basit API’ler oluşturmak için kullanılabilir. Örneğin, /api/v1/loans veya /api/v1/books/{title} gibi uç noktalar (endpoints) tanımlayarak, kullanıcıların belirli kriterlere göre veri sorgulamasına olanak tanıyabilirsiniz.
# Basit bir FastAPI örneği (Python)
from fastapi import FastAPI
import duckdb
app = FastAPI()
con = duckdb.connect(database='dbt_duckdb.duckdb', read_only=True)
@app.get("/api/v1/loan_summary")
async def get_loan_summary():
data = con.execute("SELECT * FROM fct_loan_summary LIMIT 100").fetchdf()
return data.to_dict(orient="records")
@app.get("/api/v1/books/{book_title}")
async def get_book_details(book_title: str):
query = f"SELECT * FROM dim_books WHERE book_title = '{book_title}'"
data = con.execute(query).fetchdf()
return data.to_dict(orient="records")
# Uygulamayı çalıştırmak için: uvicorn main:app --reload
Bu yöntem, en yüksek esnekliği ve programatik erişimi sunar, ancak ek geliştirme ve altyapı maliyetleri gerektirebilir.
4. Veri Güncelleme ve Otomasyon
Bir kamu veri ürününün değeri, güncel ve doğru olmasından gelir. Bu nedenle, dbt projenizi düzenli aralıklarla (örneğin günlük veya haftalık) çalıştırmak için bir otomasyon süreci kurmanız önemlidir. Bu, Cron işleri (Linux), Windows Görev Zamanlayıcısı veya daha gelişmiş orkestrasyon araçları (Airflow, Prefect) ile yapılabilir. Otomasyon, veri ürününüzün her zaman en son ham verilerle güncel kalmasını sağlar.
5. Veri Yönetişimi ve Erişim Kontrolü
Özellikle hassas verilerle çalışırken, veri yönetişimi (data governance) ve erişim kontrolü kritik öneme sahiptir. Kamu veri ürünleri genellikle hassas olmayan veriler içerse de, hangi verilerin herkese açık olabileceğini, hangi lisans altında yayınlanacağını ve veri kalitesi standartlarını belirlemek önemlidir. dbt dokümantasyonu, bu bilgileri veri ürününüzle birlikte sunmak için harika bir yoldur.
Sonuç olarak, dbt ve DuckDB ile oluşturduğunuz temiz ve güvenilir veri setleri, farklı yöntemlerle bir kamu veri ürününe dönüştürülebilir. Seçilecek yöntem, veri ürününün kullanım amacına, hedef kitlesine ve mevcut altyapı olanaklarına bağlı olacaktır. Önemli olan, işlenmiş veriyi erişilebilir, anlaşılır ve güvenilir bir formatta sunarak, ondan maksimum değeri elde etmektir.
Sonuç ve Sıkça Sorulan Sorular: Veri Mühendisliğinde Bir Sonraki Adımınız Ne Olmalı?
Bu makalede, ham CSV dosyalarından başlayarak, dbt ve DuckDB ikilisini kullanarak nasıl sağlam ve güvenilir bir kamu veri ürünü oluşturulacağını adım adım inceledik. Modern veri mühendisliği pratiklerini benimseyerek, veri dönüşümlerini otomatikleştirdik, veri kalitesini güvence altına aldık ve oluşturduğumuz veri varlıklarını dokümante ettik. DuckDB’nin yerel, yüksek performanslı analitik yetenekleri ve dbt’nin SQL tabanlı, modüler dönüşüm gücü, özellikle çevik ve maliyet etkin çözümler arayan ekipler için paha biçilmez bir kombinasyon sunmaktadır. Bu yaklaşım, veri analistlerinin ve mühendislerinin karmaşık altyapı yönetimi yerine, doğrudan veri üzerinde değer yaratmaya odaklanmalarını sağlar.
Artık, veri mühendisliği süreçlerinizin temel taşlarını oluşturdunuz. Bu bilgileri kullanarak kendi projelerinizi başlatabilir, mevcut veri setlerinizi dönüştürebilir ve kurumunuz veya topluluğunuz için değerli veri ürünleri yaratabilirsiniz. Unutmayın ki veri mühendisliği sürekli gelişen bir alandır ve yeni araçlar, teknikler ve en iyi uygulamalar ortaya çıkmaya devam edecektir. Bu nedenle, öğrenmeye ve keşfetmeye devam etmek, veri dünyasındaki başarınız için kritik öneme sahiptir.
Sıkça Sorulan Sorular
1. dbt ve DuckDB’yi büyük veri setlerinde kullanabilir miyim?
Evet, DuckDB tek bir makinede büyük veri setlerini (birkaç yüz GB’a kadar) işlemek için oldukça optimize edilmiştir ve genellikle beklenenden daha iyi performans gösterir. dbt ise, altta yatan veritabanından bağımsız olarak dönüşüm mantığını yönettiği için, daha büyük veri setleriyle çalışmak üzere DuckDB yerine Snowflake, BigQuery veya Databricks gibi bulut tabanlı veri ambarlarıyla da kullanılabilir. Başlangıç için DuckDB harika bir seçim olsa da, veri hacminiz arttıkça daha ölçeklenebilir bir veri ambarına geçiş yapabilirsiniz.
2. Bu yaklaşım geleneksel veri ambarlarından ne kadar farklı?
Geleneksel veri ambarları genellikle ayrı sunucular, karmaşık kurulumlar ve yüksek maliyetli lisanslar gerektirir. Bu yaklaşım ise, DuckDB sayesinde yerel ve sunucusuz bir deneyim sunar. dbt’nin ELT felsefesi, veriyi önce yükleyip sonra dönüştürerek, geleneksel ETL’deki dönüşüm aşamasını veritabanı içinde SQL ile yapmanızı sağlar. Bu, daha çevik bir geliştirme süreci, daha kolay sürüm kontrolü ve daha düşük operasyonel maliyetler anlamına gelir.
3. Veri güvenliği ve gizliliği nasıl sağlanır?
DuckDB yerel bir veritabanı olduğu için, veri güvenliği büyük ölçüde dosya sistemi izinlerine ve üzerinde çalıştığı makinenin güvenliğine bağlıdır. Hassas verilerle çalışırken, bu verilerin şifrelenmesi ve erişimin sıkı bir şekilde kontrol edilmesi önemlidir. dbt’nin kendisi bir güvenlik aracı değildir, ancak veri dönüşüm süreçlerinizi şeffaf hale getirerek ve veri kalitesini testlerle güvence altına alarak veri yönetişimine katkıda bulunur. Kamu veri ürünleri için, hassas olmayan verilerin paylaşılması ve anonimleştirme tekniklerinin kullanılması genellikle en iyi pratiktir.
4. dbt ve DuckDB’nin öğrenme eğrisi nasıldır?
Eğer temel SQL bilginiz varsa, dbt ve DuckDB’nin öğrenme eğrisi oldukça düşüktür. DuckDB, standart SQL kullandığı için kolayca benimsenebilir. dbt’nin ana kavramları (modeller, kaynaklar, testler, dokümantasyon) ve Jinja şablonlama dili, biraz pratikle hızla öğrenilebilir. Topluluk desteği ve dokümantasyon da oldukça kapsamlıdır, bu da öğrenme sürecini kolaylaştırır.
5. Ortaya çıkan veri ürününü nasıl güncel tutarım?
Veri ürününüzü güncel tutmanın en iyi yolu, dbt projenizi düzenli aralıklarla otomatikleştirmektir. Bu, bir zamanlayıcı (cron job), bir orkestrasyon aracı (Apache Airflow, Prefect, Dagster) veya bulut tabanlı bir iş akışı hizmeti (AWS Step Functions, Google Cloud Composer) kullanarak yapılabilir. Her çalıştırmada, dbt ham verilerdeki değişiklikleri alacak, dönüşümleri uygulayacak ve veri ürününüzü güncelleyecektir. Bu otomasyon, veri ürününüzün her zaman en son ve en doğru bilgileri yansıtmasını sağlar.
#VeriMühendisliği #dbt #DuckDB #VeriAnalizi #SQL #AçıkVeri #VeriÜrünü #ELT #DataOps