14 Ağustos 2011 Pazar

SSIS Değişkenleri/Variables

Yazan: Hüseyin Onur Özcan
Merhabalar, bu bölümde sizlerle SSIS'deki değişkenlerin önemini, kullanımını ve işlevlerini paylaşacağım.
Değişkenler hakkında göz önünde bulundurulması gereken ilk husus değişkenlerin SSIS içindeki elemanlar arasında veri transferi yapabiliyor ve bu verileri saklayabiliyor olmasıdır. SSIS bünyesinde kullanıcı tarafından yaratılan değişkenler olduğu gibi, sistem tarafında otomatik yaratılmış değişkenler de bulunmaktadır. Daha sonradan daha detaylı inceleyecek olsak da ön bilgi olarak değişkenlerin paketlerde, loop - foreach loop - sequence containerlar'da, tasklarda ve event handler işlemlerinde kullanıldığını bilmemizde fayda var.



Değişkenlerin Tanımlanması
Ana Menüde sağ tıklayarak variable sekmesini açma 
Sistemimizde bir değişken tanımlamak istediğimizde bunun iki tane yolu bulunmaktadır. Bunlardan ilki paketin içerisinde Control Flow yada Data Flow kısmında faremizin sağ tuşuna tıklayarak variables sekmesi seçilir. İkinci yol ise Visual Studio üzerinde SSIS menüsü altında variables tabına tıklamaktır ki iki çözüm de bizi aşağıdaki ekrana yönlendirmektedir. İki durumda da ekranımızın sol tarafında 'Variables' kısmı açılır ve bizim belirleyeceğimiz değişkenleri girmek için hazır hale gelir. Yeni bir değişken tanımlamak için ekran üzerinde açık mavi ile belirtilen Add Variable tıklanarak gerekli değişkenin ismi, scope'u, veri tipi ve verilecek default değer ataması yapılır. Bunun dışında soldan sağa sırasıyla yaratılan değişkeni silme, sistem değişkenlerini, tüm değişkenleri ve tanımlanacak değişken alanlarının ayarlandığı ekran görülebilir.


SSIS menüsü üzerinden Variables tanını açma


Bu bağlamda değişkenler hakkında bilinmesi gereken başka bir nokta da değişkenlerin kurulan bir SSIS projesinde kullanım çeşitliliğidir. Söz gelimi değişkenler global değişkenler ve yerel değişkenler olarak ikiye ayrılmaktadır. Değişken çeşitliliğindeki ilişkiyi bir örnek üzerinden açıklamak isterim. Yaratılan bir SSIS projemizde birden fazla paket olduğunu düşünelim. Ana paketimizden alt pakete veri taşımak istediğimizde doğal olarak değişkenlere ihtiyacımız olacak. Bu durumda ana paketimizin bağlı olduğu bir yada birden fazla alt paket bulunacağından, ana paketimizdeki değişkenler global, alt paketimizdeki değişkenler local değişkenler olarak adlandırılır. Alt paketler üst paketlerdeki değişkenlere ulaşabilirken üst paketteki değişkenler alt paketlerdeki (local) değişkenleri göremezler. Üst paketten alt pakete bir değişken değeri gönderilmek istendiğinde alt pakette ana pakette bulunan değişken tanımlanarak değeri alınabilir.  Bu durum da üst kısımda bahsedilen scope kısmından ayarlanmaktadır. Alt kademedeki bir pakette ana paketin değerlerini görmek istersek variables altında 'Show All Variables' tabına tıklamamız yeterli olacaktır.

Değişkenlerin Kullanım Alanları
Yukarı da da değindiğimiz üzere değişkenler SSIS içerisinde çeşitli alanlarda kullanılabilir. Bunlardan ilki Controlflow ToolBox'unda bulabileceğimiz Script Task yada Dataflow Toolbox'unda bulunan Script Componentler'de kullanımıdır. Bu Script yapıları içerisine Visual Basic yada C# ile script kodları yazılarak gerekli SSIS düzenlemelerinin programlama kullanılarak düzenlenmesidir.
Bir örnekle açıklamak gerekirse, control flow da bir script task yaratalım. Yaratılan Script'e çift tıkladığımızda scriptin hangi dille yazılacağı, içine alacağı değişken değerlerinin belirlenmesini, genel özellikleri ve içine yazılacak expressionlar belirlenir. Buradaki değişkenler yanlızca değişken değerlerinin okunacağı  yada hem okunup hem değiştirilebileceği şekilde düzenlenebilir. (ReadOnlyVariables, ReadWriteVariables).
Scriptlere Değişken Ekleme
Örneğimizde ReadWriteVariables örneğini kullanalım. Bu sekmeye değişken eklemek için sol tarafta bulunan bölüme tıklanarak sağ taraftakı ekran açılır. Bu bölümde yukarıda bahsi geçen tüm sistem ve kullanıcı değişkenleri görülebilir. Bizim tanımladığımız variable1 ismindeki değişken de bu liste içerisinde görülebilir. Buradan ilgili değişkenler seçilerek scripte eklenir. Edit Script kısmına tıkladığımızda açılan script sayfasına önceden belirlenen script dili ile yazılacak bir kod için bir sayfa açılır ve gerekli düzenlemeler buradan yapılır.
Örneğin bir VB kodunda daha önceden belirlenen değişkenin kod içerisinden çağrılması için  şu kod grubu kullanılabilir :
               Imports Microsoft.SqlServer.Dts.Runtime (import kısmında çağrılması gereken kısım)
               Dts.Variables("variable_name")

Değişkenlerin diğer bir kullanım alanı loop döngülerinde kullanılmasıdır. Control flowda yer alan for loop ve for each loop işlemlerinde değişkenler kullanılır. Söz gelimi loop içerisine loopun nerede başlayacağı nerede biteceği ve hangi değerin ne kadar güncelleceği hep değişken değerlerinini scriptlerle ayarlanır. Bu noktada değerler paketin scope'u içinde yeralmalı ve başına '@' sembolü konularak değişkenler ilgili alanlara yazılır.
For loop içinde değişken tanımlanması

Bir diğer kullanım alanı da değişkenlerin data flow ve control flowlar arasında kullanılmasıdır.

Değişkenlerin son kullanım alanı da bir data flow elemanı olan count rows elemanında kullanımıdır. Count row genellikle data flow içerisinde bir stop mekanizması olarak kullanılabileceği gibi, akan datanın ilgili bölümde kaç tane olduğu için de kullanılabilir, ayrıca herhangi bir datanın işlenememesi durumunda hataları dataların yönlendirilebileceği bir kısım olarak da kullanılabilir.

row countta variable kullanımı
Yukarıdaki ekrandan da görülebileceği gibi bir row count eklenip üzerine çift tıklandığında custom properties altından bir değişken eklenebilir.

Paketler Arası Değişken İletişimi/Tanımlanması

Paketler arasında (Parent/Child packages) yukarıda tanımlanan iletişimin sağlanmasının açıklanmasını bir örnek ile açıklayalım. Örneğimizde ana paketimizdeki variable MainVariable alt paketteki variable SubVariable olsun. Ayrıca alt paketimizde diğer paketten gelecek olan değişkenin eşlenebileceği bir değişken tanımlıyoruz.
 Şimdi ana paketten alt pakete değişken nasıl tanımlanır onu görelim.




Öncelikle farklı paketlerimizdeki değişkenlerimizi tanımlıyoruz. Ardından yukarıda yer alan SSIS menusunden 'Package Configuration'u seçiyoruz. Daha sonra 'Enable Package Configurations' tabını açıyoruz ve 'Add' tuşuna basılır. Çıkan ekran üzerinde 'Parent Package Variables' seçilir ve Parent variable kısmına, kullanıcı tarafından yaratıldığından 'User::Değişken Adı' yazılarak tanımlanır ve 'Next' tuşuna basılır. Bu aşamada yapılan işlem alt pakette yaratılan bir variable ile diğer paketten gelen değişkenin birbirleriyle eşleştirilmesidir. 'Next' tuşuna basıldığında aşağıdaki ekran karşımıza gelir.


Burada aynı isimde sub package'da değişken tanımladığımızdan ekranımızda o değişkene dair özellikler açılmaktadır. Buradan Value değerini seçiyoruz ve 'Next' tuşuna basıyoruz. Karşımıza aşağıdaki özet ekranı geliyor.


Bu aşamadan sonra daha ileride daha ayrıntılı değineceğimiz paketleri birbirine bağlama işlemini tamamladığımızda paketleri çalıştırdığımızda artık diğer paketteki değişken subPackage'daki MainVariable değişkenine atanmış olur.