{"id":45689,"date":"2026-11-14T21:04:23","date_gmt":"2026-11-14T18:04:23","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/"},"modified":"2026-11-14T21:04:53","modified_gmt":"2026-11-14T18:04:53","slug":"ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/","title":{"rendered":"Ham CSV&#8217;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni"},"content":{"rendered":"<h2>Ham CSV&#8217;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni<\/h2>\n<p>CSV&#8217;lerden temiz, g\u00fcvenilir ve payla\u015f\u0131labilir veri \u00fcr\u00fcnleri olu\u015fturmak art\u0131k \u00e7ok daha kolay. dbt (data build tool) ve DuckDB ikilisiyle modern veri m\u00fchendisli\u011fi pratiklerini ke\u015ffedin, s\u00fcre\u00e7lerinizi otomatikle\u015ftirin ve veri kalitenizi art\u0131r\u0131n. Bu makalede, ham verilerden anlaml\u0131 i\u00e7g\u00f6r\u00fcler elde etmenizi ve bunlar\u0131 bir veri \u00fcr\u00fcn\u00fcne d\u00f6n\u00fc\u015ft\u00fcrmenizi sa\u011flayacak ad\u0131m ad\u0131m bir rehber sunaca\u011f\u0131z.<\/p>\n<h2>Veri M\u00fchendisli\u011finde Yeni Bir D\u00f6nem: Neden dbt ve DuckDB \u0130kilisini Tercih Etmeliyiz?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz i\u015f d\u00fcnyas\u0131nda veri, adeta yeni petrol olarak kabul ediliyor. Ancak ham petrol\u00fcn do\u011frudan kullan\u0131lamamas\u0131 gibi, ham veriler de \u00e7o\u011fu zaman karma\u015f\u0131k, da\u011f\u0131n\u0131k ve kirli bir halde bulunur. Bu ham verileri anlaml\u0131 i\u00e7g\u00f6r\u00fclere d\u00f6n\u00fc\u015ft\u00fcrmek, g\u00fcvenilir raporlar olu\u015fturmak veya yapay zeka modellerini beslemek i\u00e7in kapsaml\u0131 bir i\u015fleme ve d\u00f6n\u00fc\u015f\u00fcm s\u00fcrecinden ge\u00e7irmek gerekir. Geleneksel veri ambar\u0131 (data warehouse) kurulumlar\u0131 genellikle y\u00fcksek maliyetli, karma\u015f\u0131k ve uzun s\u00fcreli projeler gerektirirken, \u00f6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli ekipler veya bireysel geli\u015ftiriciler i\u00e7in daha \u00e7evik ve uygun maliyetli \u00e7\u00f6z\u00fcmlere ihtiya\u00e7 duyulmaktad\u0131r. \u0130\u015fte tam da bu noktada, dbt ve DuckDB ikilisi modern veri m\u00fchendisli\u011fine yeni bir soluk getiriyor.<\/p>\n<p>dbt (data build tool), SQL tabanl\u0131 veri d\u00f6n\u00fc\u015f\u00fcmlerini otomatikle\u015ftiren, s\u00fcr\u00fcm kontrol\u00fcne uygun, test edilebilir ve dok\u00fcmante edilebilir veri modelleri olu\u015fturman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Geleneksel ETL (Extract, Transform, Load) s\u00fcre\u00e7lerindeki &#8220;Transform&#8221; (d\u00f6n\u00fc\u015f\u00fcm) ad\u0131m\u0131n\u0131 merkeze alarak, veriyi do\u011frudan bir veri ambar\u0131 i\u00e7inde d\u00f6n\u00fc\u015ft\u00fcrmeyi (ELT &#8211; Extract, Load, Transform) te\u015fvik eder. Bu sayede, veri analistleri ve m\u00fchendisleri, karma\u015f\u0131k veri boru hatlar\u0131 (data pipelines) kurmak yerine, i\u015f mant\u0131\u011f\u0131n\u0131 do\u011frudan SQL ile ifade edebilir ve yaz\u0131l\u0131m geli\u015ftirme pratiklerini veri d\u00fcnyas\u0131na ta\u015f\u0131yabilirler. dbt&#8217;nin mod\u00fcler yap\u0131s\u0131, veri modellerini katmanlara ay\u0131rarak y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r ve veri ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca \u015feffafl\u0131k sa\u011flar.<\/p>\n<p>DuckDB ise, \u00f6zellikle analitik i\u015f y\u00fckleri i\u00e7in tasarlanm\u0131\u015f, s\u00fcre\u00e7 i\u00e7i (in-process) \u00e7al\u0131\u015fan, h\u0131zl\u0131 ve kurulum gerektirmeyen bir OLAP (Online Analytical Processing) veritaban\u0131d\u0131r. Python, R, Java gibi dillerle kolayca entegre olabilir ve do\u011frudan dosya sisteminden CSV, Parquet gibi formatlardaki verileri sorgulayabilir. B\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde bile \u015fa\u015f\u0131rt\u0131c\u0131 derecede y\u00fcksek performans sunmas\u0131, onu yerel veri analizi, prototipleme ve dbt gibi ara\u00e7larla birlikte hafif bir veri ambar\u0131 \u00e7\u00f6z\u00fcm\u00fc olarak ideal bir aday haline getirir. Geleneksel veri ambarlar\u0131n\u0131n aksine, DuckDB&#8217;nin sunucu kurulumu veya y\u00f6netimi gerektirmemesi, geli\u015ftiricilerin odaklar\u0131n\u0131 veri d\u00f6n\u00fc\u015f\u00fcm\u00fcne ve analizine kayd\u0131rmalar\u0131na olanak tan\u0131r. Bu iki arac\u0131n birle\u015fimi, veri m\u00fchendisli\u011fi s\u00fcre\u00e7lerini demokratikle\u015ftirerek, her seviyeden kullan\u0131c\u0131n\u0131n g\u00fc\u00e7l\u00fc ve g\u00fcvenilir veri \u00fcr\u00fcnleri olu\u015fturmas\u0131na kap\u0131 aralar.<\/p>\n<h2>DuckDB: Masa\u00fcst\u00fcn\u00fczde Y\u00fcksek Performansl\u0131 Bir Veri Ambar\u0131<\/h2>\n<p>DuckDB, modern veri y\u0131\u011f\u0131n\u0131 (data stack) i\u00e7inde h\u0131zla pop\u00fclerlik kazanan, yenilik\u00e7i bir analitik veritaban\u0131d\u0131r. Geleneksel veritabanlar\u0131n\u0131n aksine, DuckDB &#8220;s\u00fcre\u00e7 i\u00e7i&#8221; (in-process) \u00e7al\u0131\u015fan bir OLAP veritaban\u0131d\u0131r; yani ayr\u0131 bir sunucu s\u00fcreci gerektirmez, kulland\u0131\u011f\u0131n\u0131z uygulama (\u00f6rne\u011fin Python beti\u011fi) i\u00e7inde do\u011frudan \u00e7al\u0131\u015f\u0131r. Bu mimari, onu \u00f6zellikle yerel (local) veri analizi, prototipleme ve dbt gibi ara\u00e7larla entegre bir \u015fekilde veri d\u00f6n\u00fc\u015f\u00fcm\u00fc i\u00e7in son derece uygun hale getirir. DuckDB&#8217;nin en \u00e7arp\u0131c\u0131 \u00f6zelliklerinden biri, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde bile inan\u0131lmaz derecede y\u00fcksek sorgu performans\u0131d\u0131r. Bunu, s\u00fctun tabanl\u0131 depolama (columnar storage) ve vekt\u00f6rle\u015ftirilmi\u015f sorgu i\u015fleme (vectorized query processing) gibi geli\u015fmi\u015f optimizasyon teknikleri sayesinde ba\u015far\u0131r.<\/p>\n<p>DuckDB&#8217;nin sundu\u011fu ba\u015fl\u0131ca avantajlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>S\u0131f\u0131r Kurulum ve Y\u00f6netim:<\/strong> Ayr\u0131 bir sunucu kurmaya, yap\u0131land\u0131rmaya veya bak\u0131m\u0131n\u0131 yapmaya gerek yoktur. Basit bir k\u00fct\u00fcphane olarak projenize dahil edilebilir. Bu, \u00f6zellikle k\u00fc\u00e7\u00fck ekipler veya bireysel geli\u015ftiriciler i\u00e7in b\u00fcy\u00fck bir kolayl\u0131k sa\u011flar.<\/li>\n<li><strong>Y\u00fcksek Performans:<\/strong> Analitik sorgular i\u00e7in \u00f6zel olarak optimize edilmi\u015ftir. S\u00fctun tabanl\u0131 yap\u0131s\u0131 sayesinde, yaln\u0131zca sorguda ihtiya\u00e7 duyulan s\u00fctunlar\u0131 okuyarak I\/O (giri\u015f\/\u00e7\u0131k\u0131\u015f) maliyetlerini minimize eder ve \u00e7ok daha h\u0131zl\u0131 sonu\u00e7lar verir.<\/li>\n<li><strong>SQL Uyumlulu\u011fu:<\/strong> Standart SQL&#8217;i destekler, bu da mevcut SQL bilginizi do\u011frudan kullanabilece\u011finiz anlam\u0131na gelir. Ayr\u0131ca, karma\u015f\u0131k analitik fonksiyonlar ve pencere fonksiyonlar\u0131 gibi geli\u015fmi\u015f SQL \u00f6zelliklerini de sunar.<\/li>\n<li><strong>Do\u011frudan Dosya Okuma:<\/strong> CSV, Parquet, JSON gibi pop\u00fcler dosya formatlar\u0131n\u0131 do\u011frudan diskinizden okuyabilir ve sanki bir veritaban\u0131 tablosuymu\u015f gibi sorgulayabilir. Bu \u00f6zellik, ham verileri h\u0131zl\u0131ca ke\u015ffetmek ve d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in paha bi\u00e7ilmezdir. \u00d6rne\u011fin, <code>SELECT * FROM 'veri.csv';<\/code> komutuyla bir CSV dosyas\u0131n\u0131 an\u0131nda sorgulayabilirsiniz.<\/li>\n<li><strong>Hafif ve Ta\u015f\u0131nabilir:<\/strong> Veritaban\u0131 genellikle tek bir dosya olarak depolan\u0131r, bu da onu kolayca ta\u015f\u0131yabilece\u011finiz veya s\u00fcr\u00fcm kontrol sistemlerine dahil edebilece\u011finiz anlam\u0131na gelir.<\/li>\n<\/ul>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda DuckDB, bir veri bilimcinin b\u00fcy\u00fck bir CSV dosyas\u0131n\u0131 h\u0131zl\u0131ca analiz etmesinden, bir veri m\u00fchendisinin dbt ile karma\u015f\u0131k veri d\u00f6n\u00fc\u015f\u00fcmlerini yerel olarak test etmesine kadar geni\u015f bir kullan\u0131m alan\u0131na sahiptir. \u00d6rne\u011fin, bir kamu kurumunun ayl\u0131k olarak yay\u0131nlad\u0131\u011f\u0131 y\u00fcz binlerce sat\u0131rl\u0131k toplu ta\u015f\u0131ma verilerini, DuckDB kullanarak saniyeler i\u00e7inde \u00f6zetleyebilir, en yo\u011fun hatlar\u0131 veya saatleri belirleyebilirsiniz. Geleneksel bir SQL veritaban\u0131 kurmak saatler alabilirken, DuckDB ile bu s\u00fcreci dakikalara indirebilirsiniz. Bu yetenekleri, onu modern veri m\u00fchendisli\u011fi ve analitik i\u015f ak\u0131\u015flar\u0131 i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getirir.<\/p>\n<h2>dbt ile Veri D\u00f6n\u00fc\u015f\u00fcm\u00fcn\u00fcz\u00fc Otomatize Edin: Modern ELT ve SQL&#8217;in G\u00fcc\u00fc<\/h2>\n<p>dbt (data build tool), modern veri y\u0131\u011f\u0131n\u0131n\u0131n temel ta\u015flar\u0131ndan biri haline gelmi\u015f, veri d\u00f6n\u00fc\u015f\u00fcmlerini y\u00f6netmek i\u00e7in geli\u015ftirilmi\u015f g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Geleneksel ETL (Extract, Transform, Load) yakla\u015f\u0131m\u0131n\u0131n aksine, dbt ELT (Extract, Load, Transform) felsefesini benimser. Bu yakla\u015f\u0131mda, ham veriler \u00f6ncelikle oldu\u011fu gibi bir veri ambar\u0131na (bu senaryoda DuckDB) y\u00fcklenir ve d\u00f6n\u00fc\u015f\u00fcm mant\u0131\u011f\u0131 veritaban\u0131n\u0131n i\u00e7inde, SQL kullanarak uygulan\u0131r. Bu, veri m\u00fchendislerine ve analistlere daha fazla esneklik ve kontrol sa\u011flar, \u00e7\u00fcnk\u00fc veritaban\u0131n\u0131n i\u015flem g\u00fcc\u00fcnden yararlan\u0131l\u0131r ve d\u00f6n\u00fc\u015f\u00fcmler do\u011frudan veri ambar\u0131nda ger\u00e7ekle\u015fti\u011fi i\u00e7in performans art\u0131\u015f\u0131 sa\u011flan\u0131r.<\/p>\n<p>dbt&#8217;nin temel g\u00fcc\u00fc, yaz\u0131l\u0131m geli\u015ftirme pratiklerini veri d\u00fcnyas\u0131na ta\u015f\u0131mas\u0131ndan gelir. SQL&#8217;i mod\u00fcler, s\u00fcr\u00fcm kontrol\u00fcne uygun ve test edilebilir bir \u015fekilde yazman\u0131z\u0131 sa\u011flar. dbt projeleri genellikle bir dizi SQL dosyas\u0131 ve YAML yap\u0131land\u0131rma dosyas\u0131ndan olu\u015fur. Her bir SQL dosyas\u0131, veri ambar\u0131n\u0131zdaki bir &#8220;modeli&#8221; temsil eder; bu model bir g\u00f6r\u00fcn\u00fcm (view) veya bir tablo (table) olabilir. Bu modeller, birbirine ba\u011f\u0131ml\u0131l\u0131klar arac\u0131l\u0131\u011f\u0131yla ba\u011flan\u0131r ve dbt, bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 otomatik olarak \u00e7\u00f6zerek do\u011fru s\u0131rayla \u00e7al\u0131\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir sat\u0131\u015f verisi modelini olu\u015fturan SQL dosyas\u0131, \u00f6nce m\u00fc\u015fteri verileri modelinin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 gerektirebilir. dbt&#8217;nin <code>ref()<\/code> fonksiyonu, bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 basit ve okunabilir bir \u015fekilde tan\u0131mlaman\u0131z\u0131 sa\u011flar.<\/p>\n<p>dbt&#8217;nin sundu\u011fu temel \u00f6zellikler ve avantajlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>SQL-First Yakla\u015f\u0131m:<\/strong> Veri d\u00f6n\u00fc\u015f\u00fcmlerini standart SQL ile yazars\u0131n\u0131z. Bu, mevcut SQL bilginizi do\u011frudan kullanabilece\u011finiz ve yeni bir dil \u00f6\u011frenme ihtiyac\u0131n\u0131 ortadan kald\u0131rabilece\u011finiz anlam\u0131na gelir.<\/li>\n<li><strong>Mod\u00fclerlik ve Yeniden Kullan\u0131labilirlik:<\/strong> Her bir veri d\u00f6n\u00fc\u015f\u00fcm\u00fc ayr\u0131 bir SQL dosyas\u0131 olarak tan\u0131mlan\u0131r. Bu modeller, di\u011fer modeller taraf\u0131ndan referans al\u0131nabilir, b\u00f6ylece karma\u015f\u0131k d\u00f6n\u00fc\u015f\u00fcmler k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alara ayr\u0131l\u0131r ve kod tekrar\u0131 azal\u0131r.<\/li>\n<li><strong>S\u00fcr\u00fcm Kontrol\u00fc:<\/strong> T\u00fcm dbt projesi (SQL ve YAML dosyalar\u0131) Git gibi s\u00fcr\u00fcm kontrol sistemleriyle y\u00f6netilebilir. Bu, de\u011fi\u015fiklikleri takip etmenizi, geri alman\u0131z\u0131 ve ekip i\u00e7inde i\u015fbirli\u011fi yapman\u0131z\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Testler ve Veri Kalitesi:<\/strong> dbt, veri modelleriniz \u00fczerinde otomatik testler tan\u0131mlaman\u0131za olanak tan\u0131r. \u00d6rne\u011fin, bir s\u00fctunun bo\u015f olmamas\u0131 (<code>not_null<\/code>) veya benzersiz de\u011ferler i\u00e7ermesi (<code>unique<\/code>) gibi k\u0131s\u0131tlamalar\u0131 test edebilirsiniz. Bu, veri kalitesini g\u00fcvence alt\u0131na alman\u0131n ve veri \u00fcr\u00fcnlerinizin g\u00fcvenilirli\u011fini art\u0131rman\u0131n kritik bir ad\u0131m\u0131d\u0131r.<\/li>\n<li><strong>Dok\u00fcmantasyon:<\/strong> dbt, veri modellerinizi, s\u00fctunlar\u0131n\u0131z\u0131 ve testlerinizi kolayca dok\u00fcmante etmenizi sa\u011flar. <code>dbt docs generate<\/code> komutuyla etkile\u015fimli bir veri katalo\u011fu olu\u015fturabilir, b\u00f6ylece veri varl\u0131klar\u0131n\u0131z\u0131 ke\u015ffetmeyi ve anlamay\u0131 kolayla\u015ft\u0131r\u0131rs\u0131n\u0131z.<\/li>\n<li><strong>Jinja Templating:<\/strong> SQL dosyalar\u0131 i\u00e7inde Jinja \u015fablonlama dilini kullanabilirsiniz. Bu, dinamik SQL olu\u015fturman\u0131za, makrolar tan\u0131mlaman\u0131za ve daha geli\u015fmi\u015f programatik d\u00f6n\u00fc\u015f\u00fcmler yapman\u0131za olanak tan\u0131r. \u00d6rne\u011fin, farkl\u0131 ortamlara (geli\u015ftirme, \u00fcretim) g\u00f6re farkl\u0131 \u015fema adlar\u0131 kullanabilirsiniz.<\/li>\n<\/ul>\n<p>\u00d6zetle, dbt, veri d\u00f6n\u00fc\u015f\u00fcm s\u00fcre\u00e7lerinizi otomatikle\u015ftiren, standartla\u015ft\u0131ran ve bir yaz\u0131l\u0131m projesi gibi y\u00f6netmenizi sa\u011flayan bir ara\u00e7t\u0131r. DuckDB ile birle\u015fti\u011finde, yerel ve h\u0131zl\u0131 bir veri ambar\u0131 \u00fczerinde g\u00fc\u00e7l\u00fc, test edilebilir ve dok\u00fcmante edilmi\u015f veri \u00fcr\u00fcnleri olu\u015fturmak i\u00e7in m\u00fckemmel bir kombinasyon sunar. Bu ikili, veri m\u00fchendisli\u011fi s\u00fcre\u00e7lerini daha \u00e7evik, \u015feffaf ve g\u00fcvenilir hale getirerek, ham verilerden elde edilen de\u011ferin maksimize edilmesine yard\u0131mc\u0131 olur.<\/p>\n<h2>Pratik Uygulama: Ham CSV Verilerini Haz\u0131rlama ve dbt Projesi Kurulumu<\/h2>\n<p>\u015eimdi, teoriden prati\u011fe ge\u00e7elim ve ham CSV verilerimizi dbt ile i\u015flemek i\u00e7in bir proje olu\u015ftural\u0131m. Bu b\u00f6l\u00fcmde, \u00f6rnek bir CSV dosyas\u0131n\u0131 ele alacak, dbt projemizi kuracak ve DuckDB&#8217;yi veri ambar\u0131 olarak yap\u0131land\u0131raca\u011f\u0131z. Amac\u0131m\u0131z, ham verileri bir dbt projesine entegre etmek ve ilk d\u00f6n\u00fc\u015f\u00fcm ad\u0131mlar\u0131na zemin haz\u0131rlamakt\u0131r.<\/p>\n<h3>Ad\u0131m 1: \u00d6rnek CSV Verisi Haz\u0131rlama<\/h3>\n<p>Herhangi bir ger\u00e7ek d\u00fcnya senaryosunu taklit etmek i\u00e7in basit bir CSV dosyas\u0131 olu\u015ftural\u0131m. \u00d6rne\u011fin, bir \u015fehirdeki k\u00fct\u00fcphane \u00f6d\u00fcn\u00e7 verme kay\u0131tlar\u0131n\u0131 i\u00e7eren bir dosya d\u00fc\u015f\u00fcnelim. Bu dosyay\u0131 <code>data\/library_loans.csv<\/code> olarak kaydedelim:<\/p>\n<div class=\"code-container\">\n<pre><code>\nid,book_title,author,borrower_id,loan_date,return_date\n1,Sefiller,Victor Hugo,101,2023-01-05,2023-01-20\n2,Su\u00e7 ve Ceza,Fyodor Dostoyevski,102,2023-01-07,2023-01-22\n3,Don Ki\u015fot,Miguel de Cervantes,101,2023-01-10,\n4,Hamlet,William Shakespeare,103,2023-01-12,2023-01-27\n5,1984,George Orwell,104,2023-01-15,\n        <\/code><\/pre>\n<\/p><\/div>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, baz\u0131 <code>return_date<\/code> de\u011ferleri eksik (NULL). Bu, veri temizleme ad\u0131mlar\u0131 i\u00e7in iyi bir \u00f6rnek te\u015fkil edecektir.<\/p>\n<h3>Ad\u0131m 2: dbt ve DuckDB Kurulumu<\/h3>\n<p>\u00d6ncelikle, sisteminizde Python ve pip kurulu oldu\u011fundan emin olun. Ard\u0131ndan dbt ve DuckDB adapt\u00f6r\u00fcn\u00fc kural\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>\npip install dbt-duckdb\n        <\/code><\/pre>\n<\/p><\/div>\n<h3>Ad\u0131m 3: Yeni Bir dbt Projesi Olu\u015fturma<\/h3>\n<p>Komut sat\u0131r\u0131nda projemizi olu\u015ftural\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndbt init library_data_product\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu komut, <code>library_data_product<\/code> ad\u0131nda yeni bir dizin olu\u015fturacak ve i\u00e7inde temel dbt proje yap\u0131s\u0131n\u0131 kuracakt\u0131r.<\/p>\n<h3>Ad\u0131m 4: DuckDB ile Profil Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>dbt&#8217;nin DuckDB&#8217;yi kullanabilmesi i\u00e7in bir <code>profiles.yml<\/code> dosyas\u0131 yap\u0131land\u0131rmam\u0131z gerekiyor. Bu dosya genellikle kullan\u0131c\u0131n\u0131n ana dizininde (<code>~\/.dbt\/profiles.yml<\/code>) bulunur. E\u011fer yoksa olu\u015fturun ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<div class=\"code-container\">\n<pre><code>\nlibrary_data_product:\n  target: dev\n  outputs:\n    dev:\n      type: duckdb\n      path: '.\/dbt_duckdb.duckdb' # Veritaban\u0131 dosyas\u0131n\u0131n dbt projesi i\u00e7inde olu\u015fturulmas\u0131n\u0131 sa\u011flar\n      schema: public # Varsay\u0131lan \u015fema ad\u0131\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Burada <code>library_data_product<\/code>, dbt projemizin ad\u0131yla e\u015fle\u015fen profil ad\u0131m\u0131zd\u0131r. <code>type: duckdb<\/code>, dbt&#8217;ye DuckDB kullanaca\u011f\u0131m\u0131z\u0131 s\u00f6yler. <code>path: '.\/dbt_duckdb.duckdb'<\/code> ise DuckDB veritaban\u0131 dosyas\u0131n\u0131n projemizin k\u00f6k dizininde olu\u015fturulaca\u011f\u0131n\u0131 belirtir. Bu, veritaban\u0131n\u0131n ta\u015f\u0131nabilirli\u011fini ve proje ile birlikte y\u00f6netilmesini kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Ad\u0131m 5: dbt Projesini DuckDB Profiline Ba\u011flama<\/h3>\n<p><code>library_data_product<\/code> dizinine gidin ve <code>dbt_project.yml<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n. <code>profile: 'library_data_product'<\/code> sat\u0131r\u0131n\u0131n do\u011fru \u015fekilde ayarland\u0131\u011f\u0131ndan emin olun. Genellikle <code>dbt init<\/code> bu ayar\u0131 otomatik yapar:<\/p>\n<div class=\"code-container\">\n<pre><code>\nname: 'library_data_product'\nversion: '1.0.0'\nconfig-version: 2\n\nprofile: 'library_data_product' # Buras\u0131 profil ad\u0131n\u0131zla e\u015fle\u015fmeli\n\nmodel-paths: [\"models\"]\nanalysis-paths: [\"analyses\"]\ntest-paths: [\"tests\"]\nseed-paths: [\"data\"] # CSV dosyalar\u0131m\u0131z\u0131n bulundu\u011fu dizin\nmacro-paths: [\"macros\"]\nsnapshot-paths: [\"snapshots\"]\n\ntarget-path: \"target\"\nclean-targets:\n  - \"target\"\n  - \"dbt_packages\"\n\nmodels:\n  library_data_product:\n    +materialized: view\n        <\/code><\/pre>\n<\/p><\/div>\n<p><code>seed-paths: [\"data\"]<\/code> sat\u0131r\u0131n\u0131 ekledi\u011fimizden emin olun. Bu, dbt&#8217;nin <code>data<\/code> dizini alt\u0131ndaki CSV dosyalar\u0131n\u0131 &#8220;seed&#8221; (tohum) olarak kullanabilece\u011fini belirtir.<\/p>\n<h3>Ad\u0131m 6: CSV Verilerini dbt Seed Olarak Y\u00fckleme<\/h3>\n<p>Olu\u015fturdu\u011fumuz <code>library_loans.csv<\/code> dosyas\u0131n\u0131 dbt projemizin k\u00f6k dizinindeki <code>data<\/code> klas\u00f6r\u00fcne ta\u015f\u0131y\u0131n. Ard\u0131ndan, komut sat\u0131r\u0131nda projemizin k\u00f6k dizininde \u015fu komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndbt seed\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu komut, <code>data<\/code> dizinindeki t\u00fcm CSV dosyalar\u0131n\u0131 DuckDB veritaban\u0131na tablolar olarak y\u00fckleyecektir. Art\u0131k <code>library_loans<\/code> ad\u0131nda bir tablomuz DuckDB i\u00e7inde mevcut.<\/p>\n<h3>Ad\u0131m 7: Kaynak Verileri Tan\u0131mlama (Opsiyonel ama \u00d6nemli)<\/h3>\n<p>dbt&#8217;nin veri kaynaklar\u0131n\u0131z\u0131 anlamas\u0131 ve dok\u00fcmante etmesi i\u00e7in <code>models<\/code> dizini alt\u0131nda (\u00f6rne\u011fin <code>models\/sources.yml<\/code>) kaynaklar\u0131n\u0131z\u0131 tan\u0131mlamak iyi bir pratiktir:<\/p>\n<div class=\"code-container\">\n<pre><code>\nversion: 2\n\nsources:\n  - name: raw_data # Kaynak sistem veya veri alan\u0131 ad\u0131\n    database: dbt_duckdb # profiles.yml'deki veritaban\u0131 ad\u0131 (DuckDB i\u00e7in genelde path'in ad\u0131)\n    schema: public # profiles.yml'deki \u015fema ad\u0131\n    tables:\n      - name: library_loans # Seed olarak y\u00fckledi\u011fimiz tablonun ad\u0131\n        description: \"Ham k\u00fct\u00fcphane \u00f6d\u00fcn\u00e7 verme kay\u0131tlar\u0131.\"\n        columns:\n          - name: id\n            description: \"\u00d6d\u00fcn\u00e7 verme kayd\u0131n\u0131n benzersiz kimli\u011fi.\"\n            tests:\n              - unique\n              - not_null\n          - name: book_title\n            description: \"\u00d6d\u00fcn\u00e7 al\u0131nan kitab\u0131n ba\u015fl\u0131\u011f\u0131.\"\n          - name: author\n            description: \"Kitab\u0131n yazar\u0131.\"\n          - name: borrower_id\n            description: \"\u00d6d\u00fcn\u00e7 alan ki\u015finin kimli\u011fi.\"\n          - name: loan_date\n            description: \"Kitab\u0131n \u00f6d\u00fcn\u00e7 al\u0131nd\u0131\u011f\u0131 tarih.\"\n          - name: return_date\n            description: \"Kitab\u0131n iade edildi\u011fi tarih.\"\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu yap\u0131land\u0131rma, dbt&#8217;nin <code>library_loans<\/code> tablosunu bir kaynak olarak tan\u0131mas\u0131n\u0131 sa\u011flar ve \u00fczerine testler tan\u0131mlamam\u0131za olanak tan\u0131r. Art\u0131k ham verilerimiz DuckDB&#8217;de ve dbt projemiz d\u00f6n\u00fc\u015f\u00fcm i\u00e7in haz\u0131r durumda.<\/p>\n<h2>dbt Modelleri Olu\u015fturma, Test Etme ve Dok\u00fcmantasyon: G\u00fcvenilir Veri \u00dcr\u00fcnleri \u0130\u00e7in Temel Ad\u0131mlar<\/h2>\n<p>Ham verilerimizi dbt projemize ba\u015far\u0131yla y\u00fckledikten sonra, s\u0131ra bu verileri anlaml\u0131 ve kullan\u0131\u015fl\u0131 veri \u00fcr\u00fcnlerine d\u00f6n\u00fc\u015ft\u00fcrmeye geldi. dbt, bu s\u00fcreci &#8220;modeller&#8221; arac\u0131l\u0131\u011f\u0131yla y\u00f6netir. Modeller, genellikle farkl\u0131 katmanlarda (staging, mart vb.) konumland\u0131r\u0131lan SQL dosyalar\u0131d\u0131r ve her biri belirli bir d\u00f6n\u00fc\u015f\u00fcm veya veri setini temsil eder. Ayr\u0131ca, olu\u015fturdu\u011fumuz bu modellerin g\u00fcvenilirli\u011fini sa\u011flamak i\u00e7in testler yazmak ve gelecekteki kullan\u0131mlar i\u00e7in dok\u00fcmante etmek de kritik \u00f6neme sahiptir.<\/p>\n<h3>Ad\u0131m 1: Staging Modelleri Olu\u015fturma<\/h3>\n<p>Staging (haz\u0131rl\u0131k) katman\u0131, ham veriler \u00fczerinde yap\u0131lan ilk temizlik ve standardizasyon ad\u0131mlar\u0131n\u0131 i\u00e7erir. Bu, genellikle s\u00fctun adlar\u0131n\u0131 standartla\u015ft\u0131rma, veri tiplerini d\u00f6n\u00fc\u015ft\u00fcrme, gereksiz s\u00fctunlar\u0131 kald\u0131rma veya basit hesaplamalar yapma gibi i\u015flemleri kapsar. <code>models\/staging<\/code> dizini alt\u0131nda bir dosya olu\u015ftural\u0131m: <code>models\/staging\/stg_library_loans.sql<\/code><\/p>\n<div class=\"code-container\">\n<pre><code>\n-- models\/staging\/stg_library_loans.sql\nSELECT\n    id AS loan_id,\n    book_title,\n    author,\n    borrower_id,\n    CAST(loan_date AS DATE) AS loan_date,\n    CAST(return_date AS DATE) AS return_date,\n    CASE\n        WHEN return_date IS NULL THEN TRUE\n        ELSE FALSE\n    END AS is_currently_borrowed\nFROM {{ source('raw_data', 'library_loans') }}\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Burada <code>{{ source('raw_data', 'library_loans') }}<\/code> ifadesi, dbt&#8217;nin <code>sources.yml<\/code> dosyas\u0131nda tan\u0131mlad\u0131\u011f\u0131m\u0131z ham veri kayna\u011f\u0131n\u0131 referans almas\u0131n\u0131 sa\u011flar. <code>CAST<\/code> fonksiyonlar\u0131 ile veri tiplerini do\u011fru formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcyoruz ve <code>CASE<\/code> ifadesiyle yeni bir <code>is_currently_borrowed<\/code> (\u015fu anda \u00f6d\u00fcn\u00e7te mi?) s\u00fctunu olu\u015fturuyoruz.<\/p>\n<h3>Ad\u0131m 2: Mart Modelleri Olu\u015fturma<\/h3>\n<p>Mart (i\u015f analizi) katman\u0131, i\u015f kullan\u0131c\u0131lar\u0131n\u0131n do\u011frudan t\u00fcketebilece\u011fi, i\u015f mant\u0131\u011f\u0131na g\u00f6re zenginle\u015ftirilmi\u015f ve genellikle toplanm\u0131\u015f (aggregated) veri setlerini i\u00e7erir. Bu katman, raporlama, g\u00f6sterge panelleri (dashboards) veya veri analizi i\u00e7in kullan\u0131l\u0131r. <code>models\/marts<\/code> dizini alt\u0131nda bir dosya olu\u015ftural\u0131m: <code>models\/marts\/dim_books.sql<\/code> (kitap boyut tablosu) ve <code>models\/marts\/fct_loan_summary.sql<\/code> (\u00f6d\u00fcn\u00e7 \u00f6zet bilgi tablosu).<\/p>\n<p><code>models\/marts\/dim_books.sql<\/code>:<\/p>\n<div class=\"code-container\">\n<pre><code>\n-- models\/marts\/dim_books.sql\nSELECT DISTINCT\n    book_title,\n    author\nFROM {{ ref('stg_library_loans') }}\nORDER BY book_title\n        <\/code><\/pre>\n<\/p><\/div>\n<p><code>models\/marts\/fct_loan_summary.sql<\/code>:<\/p>\n<div class=\"code-container\">\n<pre><code>\n-- models\/marts\/fct_loan_summary.sql\nSELECT\n    loan_id,\n    book_title,\n    author,\n    borrower_id,\n    loan_date,\n    return_date,\n    is_currently_borrowed,\n    (return_date - loan_date) AS loan_duration_days -- \u00d6d\u00fcn\u00e7 s\u00fcresi hesaplama\nFROM {{ ref('stg_library_loans') }}\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Burada <code>{{ ref('stg_library_loans') }}<\/code> ifadesi, dbt&#8217;nin daha \u00f6nce olu\u015fturdu\u011fumuz staging modelini referans almas\u0131n\u0131 sa\u011flar. dbt, bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 otomatik olarak y\u00f6netir ve modelleri do\u011fru s\u0131rayla \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<h3>Ad\u0131m 3: dbt Modellerini \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Modellerimizi olu\u015fturduktan sonra, onlar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in projenizin k\u00f6k dizininde \u015fu komutu kullan\u0131n:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndbt run\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu komut, ba\u011f\u0131ml\u0131l\u0131k s\u0131ras\u0131na g\u00f6re t\u00fcm modellerinizi DuckDB i\u00e7inde olu\u015fturacakt\u0131r. Art\u0131k DuckDB veritaban\u0131n\u0131zda <code>stg_library_loans<\/code>, <code>dim_books<\/code> ve <code>fct_loan_summary<\/code> ad\u0131nda g\u00f6r\u00fcn\u00fcmler (views) veya tablolar (materialization tipine g\u00f6re) bulunacakt\u0131r.<\/p>\n<h3>Ad\u0131m 4: Veri Kalitesi \u0130\u00e7in dbt Testleri<\/h3>\n<p>Veri \u00fcr\u00fcnlerimizin g\u00fcvenilirli\u011fini sa\u011flamak i\u00e7in testler yazmak \u00e7ok \u00f6nemlidir. <code>models<\/code> dizini alt\u0131nda (\u00f6rne\u011fin <code>models\/marts\/schema.yml<\/code>) testlerimizi tan\u0131mlayabiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>\nversion: 2\n\nmodels:\n  - name: fct_loan_summary\n    description: \"K\u00fct\u00fcphane \u00f6d\u00fcn\u00e7 verme \u00f6zet bilgileri.\"\n    columns:\n      - name: loan_id\n        description: \"\u00d6d\u00fcn\u00e7 verme kayd\u0131n\u0131n benzersiz kimli\u011fi.\"\n        tests:\n          - unique\n          - not_null\n      - name: book_title\n        description: \"\u00d6d\u00fcn\u00e7 al\u0131nan kitab\u0131n ba\u015fl\u0131\u011f\u0131.\"\n        tests:\n          - not_null\n      - name: loan_date\n        description: \"Kitab\u0131n \u00f6d\u00fcn\u00e7 al\u0131nd\u0131\u011f\u0131 tarih.\"\n        tests:\n          - not_null\n      - name: loan_duration_days\n        description: \"Kitab\u0131n \u00f6d\u00fcn\u00e7te kald\u0131\u011f\u0131 g\u00fcn say\u0131s\u0131.\"\n        tests:\n          - dbt_utils.at_least_one_true:\n              expression: \"loan_duration_days >= 0 OR is_currently_borrowed = TRUE\"\n              # \u00d6d\u00fcn\u00e7 s\u00fcresi negatif olamaz, ancak hala \u00f6d\u00fcn\u00e7teyse NULL olabilir.\n          - relationships:\n              to: ref('dim_books')\n              field: book_title # book_title \u00fczerinden dim_books ile ili\u015fki\n  - name: dim_books\n    description: \"K\u00fct\u00fcphanedeki kitaplar\u0131n boyut tablosu.\"\n    columns:\n      - name: book_title\n        description: \"Kitab\u0131n ba\u015fl\u0131\u011f\u0131.\"\n        tests:\n          - unique\n          - not_null\n      - name: author\n        description: \"Kitab\u0131n yazar\u0131.\"\n        tests:\n          - not_null\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Yukar\u0131daki \u00f6rnekte, <code>fct_loan_summary<\/code> modelindeki <code>loan_id<\/code>&#8216;nin benzersiz ve bo\u015f olmamas\u0131 gerekti\u011fini, <code>book_title<\/code>&#8216;\u0131n bo\u015f olmamas\u0131 gerekti\u011fini test ediyoruz. Ayr\u0131ca <code>loan_duration_days<\/code> i\u00e7in \u00f6zel bir test (<code>dbt_utils.at_least_one_true<\/code> makrosunu kullanarak) tan\u0131mlad\u0131k ve <code>dim_books<\/code> ile ili\u015fki testini ekledik. Testleri \u00e7al\u0131\u015ft\u0131rmak i\u00e7in:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndbt test\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Herhangi bir test ba\u015far\u0131s\u0131z olursa, dbt size hangi verinin beklentileri kar\u015f\u0131lamad\u0131\u011f\u0131n\u0131 g\u00f6sterecektir.<\/p>\n<h3>Ad\u0131m 5: dbt Dok\u00fcmantasyonu Olu\u015fturma<\/h3>\n<p>Veri \u00fcr\u00fcnlerinizin anla\u015f\u0131labilirli\u011fini art\u0131rmak i\u00e7in dok\u00fcmantasyon hayati \u00f6neme sahiptir. <code>schema.yml<\/code> dosyalar\u0131nda yapt\u0131\u011f\u0131m\u0131z a\u00e7\u0131klamalar, dbt&#8217;nin otomatik olarak bir veri katalo\u011fu olu\u015fturmas\u0131n\u0131 sa\u011flar. Dok\u00fcmantasyonu olu\u015fturmak ve taray\u0131c\u0131n\u0131zda g\u00f6r\u00fcnt\u00fclemek i\u00e7in:<\/p>\n<div class=\"code-container\">\n<pre><code>\ndbt docs generate\ndbt docs serve\n        <\/code><\/pre>\n<\/p><\/div>\n<p><code>dbt docs serve<\/code> komutu, yerel bir web sunucusu ba\u015flatacak ve taray\u0131c\u0131n\u0131zda etkile\u015fimli bir veri katalo\u011fu g\u00f6sterecektir. Bu katalog, modellerinizin ba\u011f\u0131ml\u0131l\u0131k grafi\u011fini, s\u00fctun a\u00e7\u0131klamalar\u0131n\u0131, test sonu\u00e7lar\u0131n\u0131 ve daha fazlas\u0131n\u0131 i\u00e7erir. Bu sayede, veri \u00fcr\u00fcnleriniz hakk\u0131nda bilgi edinmek isteyen herkes, kolayca eri\u015filebilir ve g\u00fcncel bir kayna\u011fa sahip olur. T\u00fcm bu ad\u0131mlar, ham CSV&#8217;lerden ba\u015flayarak, g\u00fcvenilir, test edilmi\u015f ve iyi dok\u00fcmante edilmi\u015f veri \u00fcr\u00fcnleri olu\u015fturma s\u00fcrecinin temelini olu\u015fturur.<\/p>\n<h2>Kamu Veri \u00dcr\u00fcn\u00fcne D\u00f6n\u00fc\u015f\u00fcm: \u00c7\u0131kt\u0131lar\u0131 Payla\u015fma ve Eri\u015filebilir K\u0131lma Stratejileri<\/h2>\n<p>dbt ve DuckDB kullanarak ham CSV verilerimizi temizledik, d\u00f6n\u00fc\u015ft\u00fcrd\u00fck, test ettik ve dok\u00fcmante ettik. \u015eimdi, bu i\u015flenmi\u015f ve g\u00fcvenilir veri setlerini &#8220;kamu veri \u00fcr\u00fcn\u00fc&#8221; haline getirerek, i\u00e7 veya d\u0131\u015f payda\u015flar\u0131n kullan\u0131m\u0131na sunma zaman\u0131. Bir veri \u00fcr\u00fcn\u00fc, sadece bir veri seti olmaktan \u00f6te, belirli bir ihtiyac\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f, iyi tan\u0131mlanm\u0131\u015f, eri\u015filebilir ve s\u00fcrd\u00fcr\u00fclebilir bir veri varl\u0131\u011f\u0131d\u0131r. Kamu veri \u00fcr\u00fcn\u00fc ise, genellikle bir kurumun veya toplulu\u011fun geni\u015f kitleler taraf\u0131ndan eri\u015filebilen ve kullan\u0131labilen verileri anlam\u0131na gelir. Bu b\u00f6l\u00fcmde, dbt ile olu\u015fturdu\u011fumuz \u00e7\u0131kt\u0131lar\u0131 nas\u0131l payla\u015fabilece\u011fimize dair stratejileri inceleyece\u011fiz.<\/p>\n<h3>1. D\u00f6n\u00fc\u015ft\u00fcr\u00fclm\u00fc\u015f Verileri Yeni CSV\/Parquet Dosyalar\u0131 Olarak D\u0131\u015fa Aktarma<\/h3>\n<p>En basit ve do\u011frudan y\u00f6ntemlerden biri, dbt taraf\u0131ndan olu\u015fturulan nihai modelleri (\u00f6rne\u011fin <code>fct_loan_summary<\/code> veya <code>dim_books<\/code>) tekrar dosya formatlar\u0131na (CSV, Parquet) d\u00f6n\u00fc\u015ft\u00fcrmektir. DuckDB&#8217;nin bu konuda yerle\u015fik yetenekleri vard\u0131r. dbt&#8217;nin kendi d\u0131\u015f\u0131nda, DuckDB&#8217;ye ba\u011flanarak bu i\u015flemi yapabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>\n-- Python ile DuckDB'ye ba\u011flan\u0131p d\u0131\u015fa aktarma \u00f6rne\u011fi\nimport duckdb\n\ncon = duckdb.connect(database='dbt_duckdb.duckdb', read_only=True)\n\n# fct_loan_summary modelini CSV olarak d\u0131\u015fa aktarma\ncon.execute(\"COPY (SELECT * FROM fct_loan_summary) TO 'output\/fct_loan_summary.csv' (HEADER, DELIMITER ',');\")\n\n# dim_books modelini Parquet olarak d\u0131\u015fa aktarma\ncon.execute(\"COPY (SELECT * FROM dim_books) TO 'output\/dim_books.parquet' (FORMAT PARQUET);\")\n\ncon.close()\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu dosyalar daha sonra bir web sitesinde (\u00f6rne\u011fin bir belediyenin a\u00e7\u0131k veri portal\u0131), bir bulut depolama hizmetinde (AWS S3, Google Cloud Storage) veya bir FTP sunucusunda yay\u0131nlanabilir. Bu y\u00f6ntem, \u00f6zellikle statik veya periyodik olarak g\u00fcncellenen veri \u00fcr\u00fcnleri i\u00e7in etkilidir.<\/p>\n<h3>2. \u0130\u015f Zekas\u0131 (BI) Ara\u00e7lar\u0131 ile Entegrasyon<\/h3>\n<p>D\u00f6n\u00fc\u015ft\u00fcr\u00fclm\u00fc\u015f verileri do\u011frudan i\u015f zekas\u0131 ara\u00e7lar\u0131na (Tableau, Power BI, Metabase, Looker Studio vb.) ba\u011flamak, kullan\u0131c\u0131lar\u0131n verilerle etkile\u015fimli olarak \u00e7al\u0131\u015fmas\u0131n\u0131 ve kendi raporlar\u0131n\u0131\/g\u00f6sterge panellerini olu\u015fturmas\u0131n\u0131 sa\u011flar. DuckDB, bir\u00e7ok BI arac\u0131yla do\u011frudan veya ODBC\/JDBC s\u00fcr\u00fcc\u00fcleri arac\u0131l\u0131\u011f\u0131yla entegre olabilir. E\u011fer DuckDB veritaban\u0131 dosyas\u0131 (<code>dbt_duckdb.duckdb<\/code>) payla\u015f\u0131lan bir a\u011f s\u00fcr\u00fcc\u00fcs\u00fcnde veya bulut depolamada bulunuyorsa, BI ara\u00e7lar\u0131 bu dosyaya ba\u011flanarak canl\u0131 veri eri\u015fimi sa\u011flayabilir. Bu, veri \u00fcr\u00fcn\u00fcn\u00fcz\u00fc daha dinamik ve ke\u015ffedilebilir hale getirir.<\/p>\n<h3>3. Veri API&#8217;leri Olu\u015fturma<\/h3>\n<p>Daha geli\u015fmi\u015f bir yakla\u015f\u0131m, d\u00f6n\u00fc\u015ft\u00fcr\u00fclm\u00fc\u015f verilerinizin \u00fczerine bir RESTful API (Uygulama Programlama Aray\u00fcz\u00fc) olu\u015fturmakt\u0131r. Bu, di\u011fer uygulamalar\u0131n, web sitelerinin veya geli\u015ftiricilerin verilerinize programatik olarak eri\u015fmesini sa\u011flar. Python&#8217;daki FastAPI veya Flask gibi framework&#8217;ler, DuckDB&#8217;den veri \u00e7eken ve JSON format\u0131nda yan\u0131t veren basit API&#8217;ler olu\u015fturmak i\u00e7in kullan\u0131labilir. \u00d6rne\u011fin, <code>\/api\/v1\/loans<\/code> veya <code>\/api\/v1\/books\/{title}<\/code> gibi u\u00e7 noktalar (endpoints) tan\u0131mlayarak, kullan\u0131c\u0131lar\u0131n belirli kriterlere g\u00f6re veri sorgulamas\u0131na olanak tan\u0131yabilirsiniz.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# Basit bir FastAPI \u00f6rne\u011fi (Python)\nfrom fastapi import FastAPI\nimport duckdb\n\napp = FastAPI()\ncon = duckdb.connect(database='dbt_duckdb.duckdb', read_only=True)\n\n@app.get(\"\/api\/v1\/loan_summary\")\nasync def get_loan_summary():\n    data = con.execute(\"SELECT * FROM fct_loan_summary LIMIT 100\").fetchdf()\n    return data.to_dict(orient=\"records\")\n\n@app.get(\"\/api\/v1\/books\/{book_title}\")\nasync def get_book_details(book_title: str):\n    query = f\"SELECT * FROM dim_books WHERE book_title = '{book_title}'\"\n    data = con.execute(query).fetchdf()\n    return data.to_dict(orient=\"records\")\n\n# Uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in: uvicorn main:app --reload\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu y\u00f6ntem, en y\u00fcksek esnekli\u011fi ve programatik eri\u015fimi sunar, ancak ek geli\u015ftirme ve altyap\u0131 maliyetleri gerektirebilir.<\/p>\n<h3>4. Veri G\u00fcncelleme ve Otomasyon<\/h3>\n<p>Bir kamu veri \u00fcr\u00fcn\u00fcn\u00fcn de\u011feri, g\u00fcncel ve do\u011fru olmas\u0131ndan gelir. Bu nedenle, dbt projenizi d\u00fczenli aral\u0131klarla (\u00f6rne\u011fin g\u00fcnl\u00fck veya haftal\u0131k) \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir otomasyon s\u00fcreci kurman\u0131z \u00f6nemlidir. Bu, Cron i\u015fleri (Linux), Windows G\u00f6rev Zamanlay\u0131c\u0131s\u0131 veya daha geli\u015fmi\u015f orkestrasyon ara\u00e7lar\u0131 (Airflow, Prefect) ile yap\u0131labilir. Otomasyon, veri \u00fcr\u00fcn\u00fcn\u00fcz\u00fcn her zaman en son ham verilerle g\u00fcncel kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>5. Veri Y\u00f6neti\u015fimi ve Eri\u015fim Kontrol\u00fc<\/h3>\n<p>\u00d6zellikle hassas verilerle \u00e7al\u0131\u015f\u0131rken, veri y\u00f6neti\u015fimi (data governance) ve eri\u015fim kontrol\u00fc kritik \u00f6neme sahiptir. Kamu veri \u00fcr\u00fcnleri genellikle hassas olmayan veriler i\u00e7erse de, hangi verilerin herkese a\u00e7\u0131k olabilece\u011fini, hangi lisans alt\u0131nda yay\u0131nlanaca\u011f\u0131n\u0131 ve veri kalitesi standartlar\u0131n\u0131 belirlemek \u00f6nemlidir. dbt dok\u00fcmantasyonu, bu bilgileri veri \u00fcr\u00fcn\u00fcn\u00fczle birlikte sunmak i\u00e7in harika bir yoldur.<\/p>\n<p>Sonu\u00e7 olarak, dbt ve DuckDB ile olu\u015fturdu\u011funuz temiz ve g\u00fcvenilir veri setleri, farkl\u0131 y\u00f6ntemlerle bir kamu veri \u00fcr\u00fcn\u00fcne d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilir. Se\u00e7ilecek y\u00f6ntem, veri \u00fcr\u00fcn\u00fcn\u00fcn kullan\u0131m amac\u0131na, hedef kitlesine ve mevcut altyap\u0131 olanaklar\u0131na ba\u011fl\u0131 olacakt\u0131r. \u00d6nemli olan, i\u015flenmi\u015f veriyi eri\u015filebilir, anla\u015f\u0131l\u0131r ve g\u00fcvenilir bir formatta sunarak, ondan maksimum de\u011feri elde etmektir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular: Veri M\u00fchendisli\u011finde Bir Sonraki Ad\u0131m\u0131n\u0131z Ne Olmal\u0131?<\/h2>\n<p>Bu makalede, ham CSV dosyalar\u0131ndan ba\u015flayarak, dbt ve DuckDB ikilisini kullanarak nas\u0131l sa\u011flam ve g\u00fcvenilir bir kamu veri \u00fcr\u00fcn\u00fc olu\u015fturulaca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceledik. Modern veri m\u00fchendisli\u011fi pratiklerini benimseyerek, veri d\u00f6n\u00fc\u015f\u00fcmlerini otomatikle\u015ftirdik, veri kalitesini g\u00fcvence alt\u0131na ald\u0131k ve olu\u015fturdu\u011fumuz veri varl\u0131klar\u0131n\u0131 dok\u00fcmante ettik. DuckDB&#8217;nin yerel, y\u00fcksek performansl\u0131 analitik yetenekleri ve dbt&#8217;nin SQL tabanl\u0131, mod\u00fcler d\u00f6n\u00fc\u015f\u00fcm g\u00fcc\u00fc, \u00f6zellikle \u00e7evik ve maliyet etkin \u00e7\u00f6z\u00fcmler arayan ekipler i\u00e7in paha bi\u00e7ilmez bir kombinasyon sunmaktad\u0131r. Bu yakla\u015f\u0131m, veri analistlerinin ve m\u00fchendislerinin karma\u015f\u0131k altyap\u0131 y\u00f6netimi yerine, do\u011frudan veri \u00fczerinde de\u011fer yaratmaya odaklanmalar\u0131n\u0131 sa\u011flar.<\/p>\n<p>Art\u0131k, veri m\u00fchendisli\u011fi s\u00fcre\u00e7lerinizin temel ta\u015flar\u0131n\u0131 olu\u015fturdunuz. Bu bilgileri kullanarak kendi projelerinizi ba\u015flatabilir, mevcut veri setlerinizi d\u00f6n\u00fc\u015ft\u00fcrebilir ve kurumunuz veya toplulu\u011funuz i\u00e7in de\u011ferli veri \u00fcr\u00fcnleri yaratabilirsiniz. Unutmay\u0131n ki veri m\u00fchendisli\u011fi s\u00fcrekli geli\u015fen bir aland\u0131r ve yeni ara\u00e7lar, teknikler ve en iyi uygulamalar ortaya \u00e7\u0131kmaya devam edecektir. Bu nedenle, \u00f6\u011frenmeye ve ke\u015ffetmeye devam etmek, veri d\u00fcnyas\u0131ndaki ba\u015far\u0131n\u0131z i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p><strong>1. dbt ve DuckDB&#8217;yi b\u00fcy\u00fck veri setlerinde kullanabilir miyim?<\/strong><\/p>\n<p>Evet, DuckDB tek bir makinede b\u00fcy\u00fck veri setlerini (birka\u00e7 y\u00fcz GB&#8217;a kadar) i\u015flemek i\u00e7in olduk\u00e7a optimize edilmi\u015ftir ve genellikle beklenenden daha iyi performans g\u00f6sterir. dbt ise, altta yatan veritaban\u0131ndan ba\u011f\u0131ms\u0131z olarak d\u00f6n\u00fc\u015f\u00fcm mant\u0131\u011f\u0131n\u0131 y\u00f6netti\u011fi i\u00e7in, daha b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015fmak \u00fczere DuckDB yerine Snowflake, BigQuery veya Databricks gibi bulut tabanl\u0131 veri ambarlar\u0131yla da kullan\u0131labilir. Ba\u015flang\u0131\u00e7 i\u00e7in DuckDB harika bir se\u00e7im olsa da, veri hacminiz artt\u0131k\u00e7a daha \u00f6l\u00e7eklenebilir bir veri ambar\u0131na ge\u00e7i\u015f yapabilirsiniz.<\/p>\n<p><strong>2. Bu yakla\u015f\u0131m geleneksel veri ambarlar\u0131ndan ne kadar farkl\u0131?<\/strong><\/p>\n<p>Geleneksel veri ambarlar\u0131 genellikle ayr\u0131 sunucular, karma\u015f\u0131k kurulumlar ve y\u00fcksek maliyetli lisanslar gerektirir. Bu yakla\u015f\u0131m ise, DuckDB sayesinde yerel ve sunucusuz bir deneyim sunar. dbt&#8217;nin ELT felsefesi, veriyi \u00f6nce y\u00fckleyip sonra d\u00f6n\u00fc\u015ft\u00fcrerek, geleneksel ETL&#8217;deki d\u00f6n\u00fc\u015f\u00fcm a\u015famas\u0131n\u0131 veritaban\u0131 i\u00e7inde SQL ile yapman\u0131z\u0131 sa\u011flar. Bu, daha \u00e7evik bir geli\u015ftirme s\u00fcreci, daha kolay s\u00fcr\u00fcm kontrol\u00fc ve daha d\u00fc\u015f\u00fck operasyonel maliyetler anlam\u0131na gelir.<\/p>\n<p><strong>3. Veri g\u00fcvenli\u011fi ve gizlili\u011fi nas\u0131l sa\u011flan\u0131r?<\/strong><\/p>\n<p>DuckDB yerel bir veritaban\u0131 oldu\u011fu i\u00e7in, veri g\u00fcvenli\u011fi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde dosya sistemi izinlerine ve \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 makinenin g\u00fcvenli\u011fine ba\u011fl\u0131d\u0131r. Hassas verilerle \u00e7al\u0131\u015f\u0131rken, bu verilerin \u015fifrelenmesi ve eri\u015fimin s\u0131k\u0131 bir \u015fekilde kontrol edilmesi \u00f6nemlidir. dbt&#8217;nin kendisi bir g\u00fcvenlik arac\u0131 de\u011fildir, ancak veri d\u00f6n\u00fc\u015f\u00fcm s\u00fcre\u00e7lerinizi \u015feffaf hale getirerek ve veri kalitesini testlerle g\u00fcvence alt\u0131na alarak veri y\u00f6neti\u015fimine katk\u0131da bulunur. Kamu veri \u00fcr\u00fcnleri i\u00e7in, hassas olmayan verilerin payla\u015f\u0131lmas\u0131 ve anonimle\u015ftirme tekniklerinin kullan\u0131lmas\u0131 genellikle en iyi pratiktir.<\/p>\n<p><strong>4. dbt ve DuckDB&#8217;nin \u00f6\u011frenme e\u011frisi nas\u0131ld\u0131r?<\/strong><\/p>\n<p>E\u011fer temel SQL bilginiz varsa, dbt ve DuckDB&#8217;nin \u00f6\u011frenme e\u011frisi olduk\u00e7a d\u00fc\u015f\u00fckt\u00fcr. DuckDB, standart SQL kulland\u0131\u011f\u0131 i\u00e7in kolayca benimsenebilir. dbt&#8217;nin ana kavramlar\u0131 (modeller, kaynaklar, testler, dok\u00fcmantasyon) ve Jinja \u015fablonlama dili, biraz pratikle h\u0131zla \u00f6\u011frenilebilir. Topluluk deste\u011fi ve dok\u00fcmantasyon da olduk\u00e7a kapsaml\u0131d\u0131r, bu da \u00f6\u011frenme s\u00fcrecini kolayla\u015ft\u0131r\u0131r.<\/p>\n<p><strong>5. Ortaya \u00e7\u0131kan veri \u00fcr\u00fcn\u00fcn\u00fc nas\u0131l g\u00fcncel tutar\u0131m?<\/strong><\/p>\n<p>Veri \u00fcr\u00fcn\u00fcn\u00fcz\u00fc g\u00fcncel tutman\u0131n en iyi yolu, dbt projenizi d\u00fczenli aral\u0131klarla otomatikle\u015ftirmektir. Bu, bir zamanlay\u0131c\u0131 (cron job), bir orkestrasyon arac\u0131 (Apache Airflow, Prefect, Dagster) veya bulut tabanl\u0131 bir i\u015f ak\u0131\u015f\u0131 hizmeti (AWS Step Functions, Google Cloud Composer) kullanarak yap\u0131labilir. Her \u00e7al\u0131\u015ft\u0131rmada, dbt ham verilerdeki de\u011fi\u015fiklikleri alacak, d\u00f6n\u00fc\u015f\u00fcmleri uygulayacak ve veri \u00fcr\u00fcn\u00fcn\u00fcz\u00fc g\u00fcncelleyecektir. Bu otomasyon, veri \u00fcr\u00fcn\u00fcn\u00fcz\u00fcn her zaman en son ve en do\u011fru bilgileri yans\u0131tmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>#VeriM\u00fchendisli\u011fi #dbt #DuckDB #VeriAnalizi #SQL #A\u00e7\u0131kVeri #Veri\u00dcr\u00fcn\u00fc #ELT #DataOps<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/dbt-duckdb-data-transformation-pipeline\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/dbt-duckdb-data-transformation-pipeline<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"CSV&#8217;lerden temiz, g\u00fcvenilir ve payla\u015f\u0131labilir veri \u00fcr\u00fcnleri olu\u015fturmak art\u0131k \u00e7ok daha kolay.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-45689","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ham CSV&#039;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ham CSV&#039;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni\" \/>\n<meta property=\"og:description\" content=\"CSV&#039;lerden temiz, g\u00fcvenilir ve payla\u015f\u0131labilir veri \u00fcr\u00fcnleri olu\u015fturmak art\u0131k \u00e7ok daha kolay.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-14T18:04:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-14T18:04:53+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ham CSV&#8217;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni\",\"datePublished\":\"2026-11-14T18:04:23+00:00\",\"dateModified\":\"2026-11-14T18:04:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/\"},\"wordCount\":4332,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/\",\"name\":\"Ham CSV'lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-11-14T18:04:23+00:00\",\"dateModified\":\"2026-11-14T18:04:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ham CSV&#8217;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ham CSV'lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/","og_locale":"tr_TR","og_type":"article","og_title":"Ham CSV'lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni","og_description":"CSV'lerden temiz, g\u00fcvenilir ve payla\u015f\u0131labilir veri \u00fcr\u00fcnleri olu\u015fturmak art\u0131k \u00e7ok daha kolay.","og_url":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-11-14T18:04:23+00:00","article_modified_time":"2026-11-14T18:04:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"26 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ham CSV&#8217;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni","datePublished":"2026-11-14T18:04:23+00:00","dateModified":"2026-11-14T18:04:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/"},"wordCount":4332,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/","url":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/","name":"Ham CSV'lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-11-14T18:04:23+00:00","dateModified":"2026-11-14T18:04:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ham-csvlerden-kamu-veri-urunune-dbt-ve-duckdb-ile-veri-muhendisligi-seruveni\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ham CSV&#8217;lerden Kamu Veri \u00dcr\u00fcn\u00fcne: dbt ve DuckDB ile Veri M\u00fchendisli\u011fi Ser\u00fcveni"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=45689"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45689\/revisions"}],"predecessor-version":[{"id":45690,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45689\/revisions\/45690"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=45689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=45689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=45689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}