12 Aralık 2011 Pazartesi

Control Flow Taskları - 2. Bölüm



Yazan: Beytul Kocakaplan
Yazımızın bu kısmında Data Taskları anlatarak devam edeceğiz. Bu başlık altında topladığımız elementleri tekrardan sıralar ve kısaca açıklarsak ;

Data Tasks:

Data Flow Task : ETL akışının Data Flow tabına geçmesini sağlar bu sayede datalar ile oynayabilir sütunlar içinde veya üstünde değişiklik yaparak, ileride oluşturmayı göstereceğimiz, Data Structure'unuza ekleme işlemlerini gerçekleştirebileceğiniz alana geçiş yapmanızı sağlayan control flow nesnemizdir. Bu element ile geçiş yapacağımız data flow nesnelerini ileride geniş bir şekilde inceleyeceğiz.Şu anda data Flow chartına geçiş yapabileceğiniz control flow akış elementinizin Data Flow Task olduğunu bilmeniz yeterli.

 Bulk Insert Task : Büyük miktarlardaki dataların (Text halinde saklanan) SQL Server içindeki bir tablo veya view içine yüklenmesi için kullanılır. Error Loglama gibi bir özelliğinin bulunmaması bir eksi olarak görülebilir. Fakat Hız açısından oldukça yararlı olacak bir tooldur. Özellikle text dosyası ile aynı Data warehouse'unuz aynı yerde ise hız özelliği çok etkili olabilir. Eğer farklı bir veritabanı sisteminden veri çekip bunu SQL Server'ınıza atmak istiyorsanız öncelikle elinizdeki datayı bir text dosyasına çıkartıp sonra Bulk Insert Task'ı kullanabilirsiniz.

Execute SQL Task : Adından da rahatlıkla anlaşılabileceği üzere SQL cümlelerimizi veya stored procedurelarımızı çalıştırıp query ile data çekebileceğimiz,update edebileceğimiz, silebileceğimiz veya data girişi yapabileceğimiz bir toolumuz. 

Data Profiling Task :  Data Profiling Task SQL serverın bize sunduğu ve kullanılması bilinirse çok fazla fayda sağlayabilecek bir aracımız. Aslında temel olarak SQL Server’ın data profilerında package içindeki hareketleri görmemizi sağlıyor bu tool bunun dışında ETL akışı içerisinde bir faydası yok. Asıl fayda sağlayan kısım Data Profiler (ki SQL Server 2000 ve sonrası için şu yol altında bulabileceğiniz bir araçtır kendisi ; %programfiles%\Microsoft SQL Server\100\DTS\Binn\DataProfileViewer.exe  veya BaşlatàProgramlaràSQL Serverà Performance ToolsàSQL Server Profiler) Burada data profilerın özelliklerine kullanımına giremeyeceğim fakat temel olarak Server ile olan etkileşimi (Queryler pingler bağlantılar vs.) adım adım görebileceğiniz bir araçtır kendisi.


    Data Flow  kısmı başlı başına bir konu olduğundan bu konuyla ilgili örnek yapmayacağım. Data Profiling Task ile ilgili olarak ise ekstra bir yazı yazmayı planladığım için onun ile ilgili olarak da örnek yapmayacağım.
Şimdi Bulk Insert Task ve Execute SQL Task ile ilgili birer örnek ile kullanımlarını açıklamaya çalışacağım:


Bulk Insert Task


1.İlk olarak kontrolümüzü ekliyoruz:


2.Hemen ardından editlemek için içine tıklıyoruz. Burada bilmemiz gereken bazı şeyler mevcut:
Hedef Bağlantısını Belirleme : OLE DB Connection Manager ile hedef databaseimizi ve tablomuzu veya viewümüzü belirliyoruz. (Dipnot: Bulk Insert Task yalnızca OLE DB bağlantıları desteklemektedir.)
Formatı Belirleme : Burada Bulk Insert Task’ın kullanacağı formatı belirlememiz gerekmektedir. Bunu bir format dosyası ile veya kendi belirlediğimiz özel karakterler ile yapmamız mümkündür. Row Delimeter ve Column Delimeter kısımları bunun için kullanılır.
Kaynak Bağlantısını Belirleme :  Son olarak ,Flat veya File Connection Manager ile kaynak dosyamızı önceki adımda belirttiğimiz şekilde formatlanmış bir data kaynağına bağlıyoruz.



 3. Options konfigirasyonu; Bu kısımda ise hedefe insert işlemi yapılırken seçebileceğiniz bazı özellikler bulunmakta. Bunlar Check Constraint, Keep Nulls, Enable Identity Insert, Table Lock, Fire Triggers.

Vee bu kadar şimdi taskınızı execute edin ve txt dosyanızdaki bilgilerin tablonuza dolduğunu görün : )
Peki neden Data Flow diye bir akışımız mevcut. Bulk Insert Task yalnızca var olan datayı olduğu gibi logsuz hata ayıklamasız bir tabloya veya viewe insert etmeye yararken. Data flow chart içinde bütün database türleri için veriyi text yığını haline getirmeden tabiri caiz ise veriye takla attırmamız mümkün.

Execute SQL Tool

Öncelikle bir durum oluşturalım ve bu durumda aktarım tarihlerimizi tuttuğumuzu varsayalım. Bu sayede aktarımların hangi zaman aralıklarında gerçekleştiğini görebildiğimizi olur da bir aktarımda hata olursa en son aktarım tarihinden itibaren ETL'imizi güncellememizin yeterli olacağını düşünüyoruz.
1. AdventureWorksDW veritabanına DimTransfer isminde bir tablo oluşturuyoruz. Ben tablomu şu şekilde yaptım:





2. Şimdi bu tablomuzu Data Source View'ümüzün içine ekleyelim.




3. Şimdi sıra geldi Execute SQL Task elementimizi yerleştirip istediğimiz datamızı çekmeye.
Taskımızı akış diyagramımızın içine ekleyip çift tıklıyoruz. Gerekli connection bilgilerimizi doldurduktan sonra SQL Statement kısmındaki ... ya tıklayarak querymizi yazıyoruz.


Burada ufak bir tip olarak Query'nizi parse edebilirsiniz. Yanlız burada gördüğünüz BypassPrepare özelliğini false yapmadan ETL toolumuz bize izin vermeyecektir.
Ayrıca “Build Query…”  butonuna tıklayarak gelmesini istediğiniz alanları belirleyip bunlarla ilgili SQL cümlesinin otomatik oluşturulmasını sağlamanız da mümkün.



Yukarıdaki ekranda görebildiğiniz üzere Result Set adından bir seçeneğimiz var ve bu seçenek bize SQL cümlemizden dönecek olan data ile ilgili olarak soru sormakta. Bu örneğimizde tek bir data döneceği için Result Set'imizi "Single Row"a çevirip yan taraftan Result Set sekmesini seçiyoruz.
(Bu kısımları biraz kurcalamanızı istediğim için tek tek resimler ile anlatmayacağım buradaki iş tamamen ihtiyacınıza göre değişkenlik gösterebilir.)

Buraya geçtiğimizde karşımıza ufak bir tablo çıkıyor burada oluşturduğumuz değişkenlere result setimizden dönen veriyi atmamız mümkün.

Parameter Mapping sekmesinde ise daha önceden tanımlamış olduğumuz değişkenleri parametre olarak Sql cümlemize eklememiz mümkün burada parametre kullanımı genel itibariyle şu şekildedir :
 SELECT * FROM DimTransfer WHERE transfer_id = ?
Buradaki ? parametremizi temsil etmektedir.
Son olarak SQL Sorgusu yerine nasıl stored procedure göndereceğinizden bahsetmek istiyorum. Sorgumuzu yazdığımız penceremize şu şekilde stored procedure göndermemiz mümkündür :
EXE dbo.My_Stored_Procedure
Ben şahsen stored procedurelar ile çalışma taraftarıyımdır.

Vee sonuç olarak akış diyagramımızı execute ettiğimizde bu sorgudan dönen değerleri getiren bir SQL Toolumuz mevcut oluyor. 

Execute SQL Task'ın birkaç özelliği daha mevcut fakat yazıyı daha fazla uzatmamak için ilerideki örneklerimizde bu özelliklerine de değinmeye çalışacağım.  Yazımızın devamında görüşmek üzere 












Hiç yorum yok:

Yorum Gönder