18 Aralık 2011 Pazar

İş Zekası Hakkında İpuçları

Yazan: Hüseyin Onur Özcan
Merhabalar
Blogumuzun bu kısmında SSIS ve SSAS hakkında karşılaşılan sorunlar ve akla gelen ipuçları hakkında bilgi vermeye çalışacağım, bu kısımda madde madde gitmek pratiklik açısından faydalı olacaktır.

- SSAS'de bir cube'u back-up restore işlemi yapmak için aşağıdaki adımlar takip edilebilir. Öncelikle backup edilecek cube'u bulalım. Bu cube yapısı (aslında içerisinde dimension paketlerini barındıran birden fazla kübe sahip olabilecek bir paket olarak düşünülebilir) database'de analysis services altında bulunabilir. Normal database yapısı gibi path belirtilerek backup alınır. Bu backup yedek olarak kullanılabilir ve aynı 'paket' restore edilerek geriye dönüş yapılabilir. Ancak mesele restore edeceğiniz cube başka bir server uzerinde bulunuyorsa başlıyor. Diğer server'a atıldığında ve tekrar database'e analysis services üzerinden bağlanıldığında restore ettiğinizde dikkat edilmesi gereken iki durum var. Birincisi analysis service'in datasourceları dikkatli ayarlanmalı. Test connection kısmı seçilerek doğruluğuna bakılması faydalı olacaktır. İkincisi de cube yapısını açmak için kullanılan VS 2008 ekranındaki open -> analysis services database kısmında seçilecek server ve database bilgilerinin silinerek yenilenmesi gerekiyor. Eski database ve server üzerinden devam edilirse cube process işlemi sırasında sorun çıkacaktır.

- 'Errors in the OLAP storage engine: The record was skipped because the attribute key was not found.' Hatası ile karşılaştığınızda tüm dimesionları elle tek tek process edip daha sonra cube process işlemini yaptığınızda bu sorunla karşılaşmaktan kurtulursunuz. Tabi cube process options da sadece measureları güncelleyecek olan process default seçerek.

- Eğer tüm ETL processi başarıyla tamamlanmış olmasına rağmen cube process işlemi sırasında hata alıyorsanız, yeni bir measure yaratıp cube processi sırasında yine bir hata ile karşılaşıyorsanız (bu arada hatayı açıklamak daha yardımcı olacaktır; bu hataların en çok görüleni bir tablodaki id'nin bulunamıyor olmasının söylenmesidir. Databaseden select yaparsınız id gelir ancak cube process işlemi sırasında id bulunamaz.) bu durumda yapmanız gereken şey hata veren ilgili dimesion'ların process edilmesi ve ardından cube process işleminin gerçekleştirilmesidir.
HATA: 'Errors in the OLAP storage engine: The attribute key cannot be found when processing:'

- Cube/dimension process işlemi sırasında 'Process failed. Trace information is still being transferred. If you do not want to wait for all of the information to arrive press Stop' şeklinde hata alırsanız, ya uyarıda bahsettiği üzere bir süre bekleyebilirsiniz, eğer sorun çözülmüyorsa bilgisayarı yeniden başlatabilirsiniz.

- Dimension Usage ekranı bilindiği üzere dimensionlar ile measurelar arasında ilişkinin kurulduğu ve küp yapısı ile ilgili hayati önem taşıyan bir kısımdır. Bu kısım hakkında söylenecek çok şey olmasına rağmen topluca anlatımın ileride yapılacak olmasının yanı sıra aklıma ilk gelen detayı sizinle paylaşmak istedim. Foreign key bağlantısı kurulan dimension ve fact tablolar arasında veri ilişkisinde şu noktaya dikkat etmek gerekiyor. Eğer veriniz measure alanındaki tablonuzda var ancak bağlayacağınız dimension tablonuzda yoksa hata alırsınız. Ancak Dimension tablonuzda data var, measure tablonuzda yoksa benzer bir hata almazsınız. Dolayısıyla dimension ve fact tabloları düzenlenirken bu hususu göz önüne almak önemli olacaktır.

- Visual Studio 2008 ekranındaki recent projects kısmında bulunana yerli yersiz projelerden sıkıldınız mı? Bu kısımda bulunan istenmeyen projeleri silmek oldukça basit. Çalıştır komutunun olduğu yere 'regedit' yazıyorsunuz. Daha sonra 'HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList
' dosyalarını takip ederek açılan sayfada işinize yaramayan dosyaları siliyorsunuz. İşte bu kadar basit!

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 












18 Eylül 2011 Pazar

Control Flow Taskları

Yazan: Beytul Kocakaplan
Herkese tekrardan merhaba, bugün sizlere control flow içerisinde kullanabileceğimiz elementlerden bahsetmeye çalışacağım. Bu yazımda tüm elementlerin kullanımına örnekler veremeyeceğim ama tüm elementlerin kısaca amaçlarından bahsedeceğim.
Control Flow Tabında kullanabileceğimiz elementleri bazı başlıklar altında toplarsak;

Data Tasks:
Data Flow Task
Bulk Insert Task
Execute SQL Task
Data Profiling Task

Database Object Transfer Tasks:
Transfer Database Task
Transfer Error Messages Task
Transfer Jobs Task
Transfer Logins Task
Transfer Master Stored Procedures Task
Transfer SQL Server Objects Task

Analysis Services Tasks:
AS Execute DDL Task
AS Processing Task
Data Mining Query Task

File and Network Protocol Tasks:
File System Task
FTP Task
Message Queue Task
Send Mail Task
Web Service Task
XML Task

Script and Program Execution Tasks:
Script Task
Execute Process Task
Activex Script Task

Package Execution Tasks:
Execute Package Task
Execute DTS 2000 Package Task

WMI Tasks :
WMI Data Reader Task
WMI Event Watcher Task

Maintance Plan Database Tasks:
Back Up Database
Check Database Integrity
Rebuild Index
Reorganize Index
Shrink Database

Diğer Maintance Plan Taskları:
Execute SQL Server Agent Job
Execute T-SQL Statement
History Cleanup
Notify Operator
Update Statics

Control Flow Containers :
Foreach Loop Container
For Loop Container
Sequence Container
Task Host Container



Görüldüğü üzere elimizin altında tonlarca elementimiz her birinin kullanıldığı özel ve güzel durumlar mevcut ben sizi uzun uzuuun duvar yazısı şeklinde sıkmak istemediğim için başlıklara ayırdım ve bu yazı serisi boyunca bu başlıkları tek tek içlerindeki elementler ile birlikte incelemeye çalışacağız.
Yazının devamında sizlere Data Tasklar ile ilgili bilgiler veriyor olacağım. Diğer yazıda görüşmek üzere

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.

13 Temmuz 2011 Çarşamba

SSIS Ekran Elemanları

Yazan: Hüseyin Onur Özcan
Herkese Merhaba, bugün size SSIS ekranı elemanlarından ve kullanım amaçlarından kısaca bahsedeceğim.  İlk olarak Solution Explorer penceresinden başlayalım.  Yarattığınız paketlerinizi, data sourcelarınızı veya data source viewlerinizi düzenleyebildiğiniz bir alandır. Data Source’un ve Data Source View’lerin nasıl oluşturulduklarını paketlerin eklenmesini ilerleyen zamanlarda daha detaylı bir şekilde anlatacağım. Şimdilik  kısaca ne olduklarından bahsedeyim.

Data Source veritabanınıza her yerde kullanmak amacıyla oluşturduğunuz bağlantılarınızı görebileceğiniz ve bağlantı oluşturup düzenleyebileceğiniz bir alt klasörünüz.
Data Source View ise veritabanınızdaki belli tablolardan bir view oluşturup bu view üzerine bağlantı kurmanıza yardımcı olan bağlantılarınızın bulunacağı klasörünüz.
SSIS Packages ise ETL paketlerinizin bulunduğu klasörünüz.

Properties ekranı ise klasik ayar ekranlarından farksız ileride SSIS toollarını açıklarken properties ekranına bol bol göz atacağız.
Connection Manager Ekranında ise sadece o pakette geçerli olmak üzere bağlantı tanımlamaları gerçekleştirebiliyoruz.
ToolBox , Daha sonra hemen hemen her bir elemanı ve özelliklerini detaylarıyla açıklayacağımız. ToolBox  her  flow chart için ayrı ayrı elemanlara sahiptir.
Control Flow Tools ;
Control Flow Items”  ETL’in iş akışını tasarlarken kullandığımız toollardan oluşur.
Maintance Plan Task” ETL’in iş akışına ek olarak çeşitli optimizasyon işlemlerini yapabileceğimiz toollar  burada bulunmaktadır.
 Data Flow Tools ;
Data Flow Sources” Data flow tasklarda bir kaynaktan veri çekmek için kullanılan toolların  bulunduğu kısımdır.
Data Flow Transformations Tools” Sourcedan aldığımız dataları işlemek için kullanabileceğimiz toollar  burada bulunmaktadır.
Data Flow Destinations Tools” Flow içerisinde işlediğimiz dataların çeşitli ortamlara kaydı için kullanılan toollar burada bulunmaktadır.

Son olarak Flow chartların bulunuduğu bölmedeki diğer 3 chartı da kısaca açıklayarak bu yazıyı bitirmek istiyorum.
Event Handlers ;  ETL akışı sırasında gerçekleşen eventler için farklı senaryolar geliştirebilirsiniz ve bu seneryolara uygun iş akışları tasarlayabilirsiniz. Örneğin bir data flow taskınız fail olduğunda OnEror eventi için farklı bir senaryo düşünüp burada bunu etkinleştirebilirsiniz.
Package Explorer ; Akış düzenlediğiniz paketinizin içindeki değişkenleri sabitlerinizi event handlerlarınızı kısacası paketin içindeki ayarlamalarınızın hemen hemen hepsine özet bir bakış atabildiğiniz ekranınız “Package Explorer” ekranınızdır.
Progress ;  Bu ekran ETL akışını çalıştırdığınızda aktif olarak görülebilir. İş akışının her bir basamağının başlangıç bitiş gerçekleşen durumlar ve oluşan hatalar ile ilgili detaylı bilgiler alabildiğiniz ekranınızdır.
Bu yazımızda sizlere SQL Server Business Intelligence Development Studionun genel arayüzünü mümkün olduğunca çok görsel ile anlatmaya çalıştık. Sonraki yazılarımızda bu ekranlardaki elementleri tek tek detaylı bir şekilde inceleyip örnekler ile çalışmalarını sizlere göstermeye çalışacağız.

5 Temmuz 2011 Salı

Integration Services Giriş

Yazan: Hüseyin Onur Özcan
Merhabalar
Yazılarımızda Microsoft İş Zekası toollarını 4 temel konu başlığı altında inceleyeceğiz. Bunları kabaca sıralamak gerekirse başlıklarımız; Integration Services, Analysis Services, Datawarehouse ve Reporting Services.

SSIS (SQL Server Integration Services) olarak da bilinen Integration Services, SQL Server Management ile erişilen bir özellik olarak çeşitli wizard'lar ile birlikte Business Intelligence Studio ile uygulanmaktadır. SSIS'in detaylarına inmeden önce ETL'in ne olduğu konusuna açıklık getirmek bu işlemleri neden yaptığımızı anlamamız açısından büyük bir fayda sağlayacaktır.  ETL açılım olarak Extract-Transform-Load kelimelerinin baş harflerinden oluşan bir kısaltmadır. Bu açılım da çeşitli kaynaklardan alınan ve gereksiz kısımlarından arındırılan verilerin işlenmesi anlamına gelmektedir.


Bu bağlamda ETL'in çerçevesinin çizilmesinde standart bir Integration Services Projesi ekranında bulunan DataFlow Ekranında yapılan işlemler; temel olarak  ETL'in yapısına uygun olarak bir veri kaynağından bilgilerin alınması,  bunların Data Flow Transformation's altındaki işlemler aracılığıyla işlenmesi ve sonunda da bir kaynağa yazılması olarak sıralanabilir.

Integration Services altında yapılan veri düzenleme işlemleri gerek Controlflow'da  gerekse de Dataflow'da olsun bir path mantığı altında yapılmaktadır. İlerleyen zamanlarda daha detaylı açıklayacak olsak da bir Integration Services'te bulunan ControlFlow ve DataFlow kısımlarında işlemler path içerisinde tanımlanır. Bir process'in bitmesinin ardından path içerisinde bulunan sıradaki process yapılarak path sonuna gelinene kadar devam eder. Yapılan işlemler işlem sırasında sarı, işlem başarıyla tamamlandığında yeşil, işlem hata aldığında da kırmızı renkler ile tanımlanır.

Integration Services'in Genel Kullanımları ve Temel Kavramlar 
SSIS'in hayatımıza getirdiği kolaylıklarla göz attığımızda SSIS bizlere SQL Server yada diğer çeşitli kaynaklardan gelen (flat file, Oracle vs.) verilerin aktarımlarına imkan verirken, birden çok kaynaktan gelen verilerin birleştirilmesine de imkan sağlar. Gelen dataların bir küp oluşturma amacıyla standart bir hale getirilmesi (id'lerin düzenlenmesi, gereksiz datalardan ayıklanması) için de kullanılmaktadır. Daha da önemlisi SSIS daha büyük iş zekası raporları için SQL Server 2008'de bulunan iş zekası tool'ları ile entegredir. 

SSIS'de yapılan işlemler bir paket mantığı altında tutulur, düzenlenir ve derlenir. Bu paketler msdb yada XML formatında tutulur ve projeler arasında copy-paste yöntemi ile taşınması mümkündür. ControlFlow tasklar ve container'lerdan oluşur. Tasklar ile kullanıcı veriler üzerinde düzenlemeler yaparken container ise adından da anlaşılacağı üzere bir grup task bünyesinde barındırarak daha modüler bir yapı kazandırır. Dataflow verilerin alınacağı yerleri, veri dönüşümlerini ve verilerin yazılacağı yerleri tutar. Değişkenler(variable) daha dinamik bir biçimde operasyonlar yapılmasını ve control flow ile dataflow arasındaki değişken iletişimini sağlamaya yardımcı olur. Event Handlers ise isminden de anlaşılacağı üzere run time'da yapılan işlemlerin görüntülenmesine ve paketlerin işlem karşılıklarının bizlere gösterilmesini sağlar. 

SSIS'in gücünü konu ile ilgili detaylara daha fazla girdiğimizde daha iyi anlayacağız. SSIS kullanıcılara minimum kod yazdırarak (scriptler hariç ve SQL komutları hariç) maksimum performans ve kontrol sağlamak amacıyla yetiştirilmiştir. Bu bağlamda paketler ile (yukarıda bahsedilen özellikleri dışında) bir yapı oluşturulduktan sonra bu paketler üzerine sağ tuşla tıklayarak 'Execute Package' seçilerek bu paketlerin içindeki işlerin yapılması, log işlemleri hakkındaki desteği, bünyesinde bulundurduğu breakpointler, configurationslar, bağlantı ayarlamaları ve transaction ile kullanıcılara büyük kolaylıklar sağlamaktadır. (Bu konular ile ilgili kapsamlı bilgiler daha sonra verilecektir)

SSIS içerisinde bulunan paketlerde dataflow kısmının yapısal olarak nasıl çalıştığı kısmından bahsetmek gerekirse, dataflow'lar içerisinde sağlanan in-memory bufferlar sayesinde data source'dan alınan veriler önceden tanımlı buffer büyüklükleri içerisinde (tabi sistemin de el verdiği ölçüde) alınır. Transform işlemine tabi tutularak veri hedeflerine yazdırılır ve sıradaki kalan sayıdaki veri için aynı işlem işlem sonuna varılana dek tekrarlanır. (Örnek vermek gerekirse 1 milyon satır veri için buffer'ımız 100 bin veri alacak şekilde ayarlanırsa yukarıda bahsedilen işlem 10 kere tekrarlanır.)



Özetle 
Hatırlanması Gereken Noktalar; 
  • SQL Server Integration Services bir SQL Server 2008'in ETL işlemlerinin kolaylıkla yapılabilmesini sağlayan bir aracıdır. Bu aracın asıl amacı elle yapılması gereken işlemlerin daha kolaylıkla yapılmasını sağlamaktır. 
  • SSIS mimarisinde temel olarak 2 tane ara yüz bulunmaktadır. Bunlar Control Flow  ve Data Flow arayüzleridir. 
  • Integration Services paketinde bulunan Control Flow (daha sonradan da açıklanacağı üzere) Integration Services'te kullanılmak üzere sunulan çeşitli Control Flow Itemların kullanılmasını, verilerin hazırlanmasını, hazırlanacak olan iş akışlarının (workflow) ve iş zekası fonksiyonlarının çeşitli scriptlerle ile de desteklenebilecek bir şekilde işlenmesini sağlayacak araçlar içerir.
  • Dataflow arayüzü de yukarıda da bahsettiğimiz üzere çeşitli dataflow unsurları kullanarak kaynaklardan veri çekilmesi, verilerin hesaplama yada dönüştürme (transformation) islemlerinin yapılarak hedef bir kaynağa yazılmasını sağlarken aynı zamanda bir dataflow'a gelen input ve outputların bir path mantığından düzenlenmesini sağlar.