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