SSIS (SQL Server Integration Services) maceramız

Adil Deveci
4 min readOct 5, 2021

--

Bu yazıda sizlerle oldukça yaygın olarak kullanılan bir ETL aracı olan SSIS hakkında bazı bilgiler vereceğim. Sonrasında büyük bir projede bunu nasıl uyguladığımıza dair bilgiler vereceğim.

ETL (Extract Transform Load) Nedir

Öncelikle ETL nedir bunu açıklayalım. Özetle verinin bir kaynak sistemden alınıp (extract) belirli işlemlerden (transform) geçirildikten sonra hedef sisteme yüklenmesidir (load).

Extract (Ayıklama): Veri kaynaklardan farklı biçimlerde (excel, text dosyası, herhangi bir veri tabanı…) alınır. Sonrasında bir dizi kural veya işlemden geçirilmek üzere Transform aşamasına aktarılır.

Transform (Dönüştürme): Kaynak sunucudan çıkarılan veriler hamdır ve işlenmemiş haliyle kullanılamaz. Bu nedenle temizlenmesi, haritası çıkarılması ve dönüştürülmesi gerekiyor. Aslında bu, ETL sürecinin değer kattığı ve verileri, anlayışlı raporların oluşturulabilmesi için değiştirdiği temel adımdır.

Load (Yükleme): Sorguların daha efektif bir şekilde gerçekleştirilebilmesi ve doğru sonuçların dönmesi için veriler temizlenmiş ve sınıflandırılmış olacaktır. Bu veri artık hedef sistemlere aktarılabilir.

(SSIS) SQL Server Integration Services Nedir

SSIS farklı kaynaklarda (Veri tabanı, Excel, Word, Txt vb.) bulunan verilerimizin hepsini toplayıp bir veri ambarı oluşturmak için kullandığımız ETL aracıdır. SSIS Microsoft SQL Server 2005'ten itibari ile Microsoft’un önceki DTS (Data Transfer Service)yerini almıştır.

Bilinmesi Gereken Temel Terimler

Veri Ambarı (Data Warehouse — DWH): Farklı kaynaklarından çektiğimiz verilerin bir ortamda toplanması diyebiliriz. Bu süreç verinin üzerinde daha etkili ve daha kolay sorguların yapılmasını sağlamak için gereklidir.

Control Flow: İş akışını yönettiğimiz veriyi işleme adımlarından oluşur. Çeşitli veri düzenleme Task’larından (görevlerinden) ve bu Task’ların bir araya gelmesiyle oluşan container bileşenlerini içerir.

Data Flow: Çeşitli kaynaklardan veri çekip yaptığımız dönüşüm işlemlerinden sonra hedef kaynağa yazdığımız alandır.

SSIS’i destekleyen bağlantı türleri aşağıdaki gibidir

  • ODBC
  • OLEDB
  • Net SQLClient
  • Düz bir dosya
  • Excel
  • XML

Örnek Vaka Çalışması

Çalıştığım şirkette bir raporlama çalışması kapsamında ihtiyacımızı SSIS kullanarak çözdük.Bu raporlama içerisinde kullanılan kaynaklar farklı şirketin sunucusu ve veri tabanlarından oluşmakta.

İlk aşamada veri ambarı (dwh) oluşturuluyor. 2 farklı şirket olduğu için her şirket kendi veri ambarını oluşturacak şekilde yapı kurgulandı.

Veri ambarları oluşturulurken her tablo için aşağıdaki adımlar uygulandı

  • Mevcut DWH Payments tablosu içi boşaltıldı (Truncate)
  • Üretimde kullanılan veri tabanlarından bilgiler Extract edildi, sadece ihtiyaç duyulan bilgiler alındı ve DWH’daki tablo güncel bilgiler ile dolduruldu (Fill Payments)
Veri ambarı doldurulma aşaması
  • Her iki şirketin veri ambarlarının ortak bir havuzda toplanması için ayrı bir veri ambarı kullanıldı. İkinci aşamada Extract işlemi sonrasında Transfer task’ları kullanılarak iki şirketin veri ambarı ortak veri ambarında birleştirildi
  • Bu aşamadan sonra her iki şirketin gereken tüm tabloları için ortak veri ambarımız dolmuş oldu, sıra geldi bu verileri alıp gerekli rapor dosyalarını oluşturmaya ve hedefe göndermeye. FilePayments.dtsx içerinde öncelikle oluşacak excel dosyasının adını veri tabanından alıyoruz, sonra excel verilerini Get Payments Data adımında çekiyoruz ve Export Data adımında kolon eşleştirme yapıyoruz.
Excel oluşturma aşaması

Excel dosyalarımız da hazır olduğuna göre son aşama olan excel dosyalarını gönderme işlemimizi de yapabiliriz artık :) FileTransport ilgili excel dosyasının adı alınıyor, hedef path’in bilgisi alınıyor ve Transport işlemi gerçekleştiriliyor.

Tüm bu işlemler sadece 1 tablo özelinde yapıldı, bütün bu işlemleri 30–40 tabloda yaptığımızı ve 30 40 farklı excel dosyası hazırlayıp gönderdiğimizi düşünürsek bence başarılı bir çalışma oluş :)

Son olarak tüm bu paketlerin bir akış içerisinde ve doğru sırada çalıştırılması gerekiyor, bunu da yine SSIS içinden yönetebilirsiniz tabi, fakat biz bu süreci Automic üzerinden yönettik. Böylece herhangi bir pakette bir sorun olup akış takıldığında tüm akışı baştan çalıştırma yerine sadece takılan yerden devam ettirme gibi özelliklerden faydalandık. Tabi bu kadar fazla paketi automic’e tanımlamak da başlı başına bir iş olduğunu göz ardı etmeyin :)

--

--