SSIS ile ETL Uygulaması
Merhaba arkadaşlar. Bu yazımda SSIS (SQL Server Integration Services) ile veritabanından veri çekip (extract), bazı dönüşüm (transform) işlemlerinden sonra hedef kaynağa yazacağımız (load) bir ETL uygulaması yapacağız.
Başlamadan önce eğer okumadıysanız 10 soruda SSIS’e Giriş isimli yazıma bir göz atmanızı tavsiye ederim. Örneğimizi AdventureWorks2014 veritabanını kullanarak yapacağız. Buraya tıklayarak indirebilirsiniz. Bu yazıdaki görsellerde Visual Studio 2019 Community ekran görüntülerini göreceksiniz ve SQL Server 2018 kullanıyor olacağım. Sizdeki sürüme göre ufak farklılıklar olabilir.
SSIS’ de tüm bileşenleri sürükleyip tasarım ortamına bırakabiliyoruz. Veri tabanı bağlantısını kurabilmek için Control Flow ekranına bir tane Data Flow Task ekliyoruz ve üzerine çift tıklıyoruz. ETL işlemlerini burada gerçekleştireceğiz.
Açılan ekrana SQL’ den veri alacağımız için OLE DB Source sürüklüyoruz ve tekrar çift tıklıyoruz. İlk defa bir bağlantı gerçekleştireceğimiz için tekrarlı olarak New diyoruz ve açılan ekranda sunucu adını girdikten sonra veritabanı seçimi yapıyoruz. Sunucu adına localden bağlanıyorsanız localhost yazabilir veya nokta koyarak geçebilirsiniz. Test Connection ile bağlantı sağlayıp sağlamadığımızı kontrol edebiliriz. Yine tekrarlı olarak OK dedikten sonra Şekil-2’de sol resimde görülen tablo veya view seçim alanının aktif olduğunu göreceğiz. Örneğimiz için siz de dimCustomer tablosunu seçebilirsiniz.
Seçtiğimiz tablodaki tüm kolonları almak zorunda değiliz. Bunun için Columns bölümüne geçip istediğimiz kolonları seçebiliyoruz. Ben çeşitli dönüşüm işlemleri için isim, soy isim, doğum tarihi, adres ve yıllık gelir bilgilerinin olduğu kolonları seçtim. OK dedikten sonra artık istediğimiz verileri çekmiş oluyoruz.
Verileri aldığımıza göre artık dönüşüm işlemlerine başlayabiliriz. DimCustomer tablosunda isim ve soy isim ayrı ayrı kolonlarda tutuluyor, biz bunları birleştirelim. Bu kişileri doğum yılına göre sıralayalım ve yeni bir sütun ekleyerek yıllık gelir miktarlarını gruplandıralım.
Tasarım ekranımıza Derived Column (Sütun Türet) ekliyoruz; isim ve soy isimi birleştirerek yeni bir sütuna yazıyor olacağız. Eklediğimiz her bileşeni oklar yardımıyla birbirine bağlamalıyız, aksi halde zaten uyarı alırız. Bunun için OLE DB Source bileşenine bağlı oku Derived Column ile birleştiriyoruz. Şimdi çift tıklıyoruz ve Transformation Editor (Dönüşüm Editörü) açılıyor.
Burada (Şekil-5) üçe bölünmüş bir ekran görüyoruz; sol üstte sadece seçmiş olduğumuz kolonlar listeleniyor. Sağ tarafta dönüşüm gerçekleştirebileceğimiz fonksiyonlar var. Alt tarafta ise kolonları ve fonksiyonları birleştireceğimiz bir tablo yer alıyor.
Tablonun Derived Column Name alanında oluşturacağımız sütuna isim veriyoruz. Data Type ve Lenght otomatik geliyor, istersek bu alanları değiştirmek için de fonksiyon kullanabiliyoruz. Expression alanında oluşacak sütuna ait düzenlemeleri C# diline uygun olarak yazıyoruz.
İsim ve soy ismi birleştirmek için herhangi bir fonksiyon kullanmamıza gerek yok; Şekil-5’te görüldüğü gibi boşluk ve operatör yardımıyla bunu yapabiliriz. Burada sadece çift tırnak kullanmaya dikkat edin, tek tırnak kullanırsanız satırı kırmızı renkte yazarak sizi uyarır.
Eğer bir fonksiyon kullanacaksak önce fonksiyonu Expression bölümüne sürüklüyoruz daha sonra parantezlerin içine kullanmak istediğimiz kolonu sürüklüyoruz. Örneğin Doğum Yılı sütununu oluşturmak için Date/Time Functions kısmından “Year” fonksiyonunu alıyoruz ve içine hangi tarih alanınından yılları çekeceğini yani BirthDate sütununu bırakıyoruz.
Gelir Grubu oluşturmak için de yine bir sütun türetmemiz gerekiyor. Ben tamamen örnek olması açısından yıllık geliri 60.000’den az olanları ‘DÜŞÜK’, 100.000’den fazla olanları ise ‘YÜKSEK’ olarak gruplandırdım. Formülümüzü parantezlere dikkat ederek ve C# kullanarak yazıyoruz. Tüm veri dönüşümlerini yaptıktan sonra OK diyerek sayfayı kapatabiliriz.
Bir de doğum yılına göre verileri sıralayalım demiştik. Bunun için Data Flow Task ekranına Sort (Sırala) bileşenini sürüklüyoruz ve Derived Column’a bağladıktan sonra üzerine çift tıklıyoruz. Hangi kolonu sıralamak istediğimizi ve sıralama tipini seçip OK diyoruz.
Artık verileri istediğimiz bir hedef kaynağa yazdırabiliriz. Ben bir txt dosyası kullanmak için Flat File Destination seçiyorum ve Data Flow Task ekranım Şekil-7’deki hali almış oluyor.
Flat File Destination’a çift tıklıyoruz ve öncelikle dosyayı oluşturmak istediğimiz yolu seçiyoruz. Daha sonra Advanced bölümünden çıktımızda görmek istemediğimiz sütunları çıkarabiliriz. Ben sadece yeni oluşturduğumuz sütunları görmek istediğimden, diğerlerini kaldırıyorum. OK dedikten sonra Şekil-9’da görülen Mapping kısmına gelerek SSIS’in input (girdi) ve destination (hedef) verilerini eşleştirmesini onaylamak için tekrar OK diyoruz.
Artık görevimizi çalıştırmak için Başlat’a tıklayabiliriz veya Data Flow Task alanında herhangi bir boşluğa sağ tıklayarak Execute Task diyebiliriz.
Görev tamamlandığında SSIS kaç satır veri işlediğini bize gösteriyor. Hemen gidip belirttiğimiz dosya yolunda txt dosyamızı açıyoruz ve yaptığımız tüm işlemlerin sonucunu kolon isimleriyle beraber görüntüleyebiliyoruz.
SSIS kullanarak ilk defa ETL örneği oluşturduğumuz için çok detaylı şekilde anlatmaya çalıştım. Umarım buraya kadar okuyan herkes için faydalı olmuştur 🙂
Görüşmek üzere!
Kaynakça
Görsel Kaynak:
https://www.grazitti.com/services/data-science/solutions/etl/