Cache Transform Component ve Lookup Component İçinde Cache Connection Kullanmak

6. December 2010

 

DTS 2000 içerisinde bulunan lookup işleminin daha da gelişmişi olan SSIS 2005 Lookup Component'i ilk gördüğümde oldukça etkilenmiştim. Çoğu ETL tasarımımın da en önemli parçalarından biri olmuştu. Ancak belirli bir zaman sonra, her ne kadar işini iyi yapsa da, "Şöyle olsa keşke" demekten kendimi alıkoyamadığım bazı durumlar oluyordu. Bunların başında da Lookup Component'inin sadece 1 kere önbellekleme işlemini yapması ve bu önbellekleme işleminin sonucunda oluşan veriye erişemiyor olmanız ve diğer paketlerde de bu önbellekleme işlemini tekrar tekrar yapmanızın gerekmesiydi. İkinci önemli problem ise Lookup Component'in OLEDB Connection Manager dışında herhangi bir connection manager kullanamıyor olmasıydı. Bu özellikle farklı sistemlere bağlandığınızda önemli problemlere yol açabiliyordu.

SSIS 2008 içerisinde gelen Cache Transform Component ve Lookup Component içerisinde Cache Connection kullanabilme özelliği beni hayran bıraktı kendine. "İşte şimdi oldu!" dedim.

Bu yazıda sizinle Cache Transform Component ve paralelinde bu component'in çıktılarını Lookup Task içerisinde kullanmayı gösterebilmeyi umuyorum.

 

Öncelikle Cache Transform Component Data Flow Task'ları içerisinde "Transformations" bölümünde bulunuyor. (Destination içerisinde neden bulunmadığını anlamadım ama, neyse)

Dilerseniz her zaman yaptığımız gibi direkt işleme girişerek anlatalım.

Hemen yeni bir proje ve/veya Paket oluşturup, Dataflow task'ımızı sürükleyip bırakalım. Dataflow task içerisinde bir adet OLEDB Source bir adet de Cache Transform Component Ekleyelim.

OLEDB Source içerisine girelim ve demo Adventure Works veritabanından Sales.Customer tablosunu seçelim. Ardından Cache Transform Component içerisine girelim.

Açılan Cache Transformation Editor penceresinde sağ tarafta bulunan New düğmesine basarak Cache Connection Manager Editor penceresine gidelim.

Bu pencerede gördüğümüz üzere "Use File Cache" seçimi mevcut. Bu seçim bizim önbelleğe alınan veriyi aynı zamanda dosya sisteminde de tutabileceğimizi gösteriyor. Peki, hangi durumlarda bu özelliği kullanabiliriz?

Aklınıza gelmiştir. Eğer ki bu cache'i birden fazla paket içerisinde refere edecekseniz tutabilirsiniz. Eğer ki SSIS Paketinin çalışacağı makinada çok fazla RAM'iniz yoksa yine tutabilirsiniz. Eğer ki farklı sistemlerden veri çekiyorsanız ve bu sistemlere OLEDB bağlantısı gerçekleştiremiyorsanız da vs vs tutabilirsiniz mesela.

"Use File Cache" kullanmazsanız SSIS o Execution boyunca veriyi package scope içinde Memory'de tutabilir. Ve siz de aynı verifi farklı dataflow'lar içerisinde kullanabilir ve yeniden önbellekleme yapmak durumunda kalmayabilirsiniz.

Bu örnekte veriyi dosya sisteminde tutacağımdan dolayı ben "Use File Cache"'i kullanacağım. Seçtikten sonra, sağ tarafta bulunan Browse düğmesine basarak bu dosyayı nerede tutacağıma karar veriyorum. CAW uzantılı bir dosya oluşturuyor. Peki dosya büyüklüğü ne kadar olacak? Meraklısı için karşılaştırma yapmak amacıyla aynı büyüklükteki veriyi farklı uzantılara export ettim. Aşağıdaki tabloda 65536 satır ve 9 sütündan oluşan bir veri matrisine ait çeşitli uzantılarda veriyi sakladığımızda kaplayacağı disk büyüklüklerini görebilirsiniz:

Dosya Tipi

Veri Büyüklüğü

Lookup içinde direkt kullanılabilir mi?

Text File (txt)

3,15 MB

Hayır

Cache Transform (caw)

3,94 MB

Evet

SQL Server Table

5,12 MB

Evet

Raw File (...)

6,62 MB

Hayır

Excel File (xls)

8,27 MB

Hayır

 

Evet, merakı giderdikten sonra devam edelim. Cache Connection Manager Editor penceresinde ikinci sekmede kolonlarınızı ve index sıralamanızı tanımlıyorsunuz ve ardından artık bu dosya kullanıma hazır olacak ssis paketini çalıştırdığınızda. (Dikkat burada vereceğiniz index bilgisi üzerinden join kuracaksınız. Biz örneğimizde CustomerID üzerinden lookup join kuracağız o nedenle index'i 1 yaptık)

 

Bu cache'i nasıl kullanacağımıza gelecek olursak, hemen yeni bir dataflow ekliyoruz. Bu dataflow içerisinde Oledb Source olarak Sales.SalesOrderHeader tablosuna bakıp, bu satıra ait müşterinin müşteri tipini öğrenelim lookup ile.

Lookup Editor'e geçtiğimizde öncelilkle Cache Mode'u full Cache, Connection Type'ı Cache Connection Manager olarak seçelim.

Connections sekmesine geçip hangi cahce connection Manager'ı kullanacağımızı da belirttikten sonra Columns sekmesinde hangi kolon üzerinden eşleştirmeyi yapacağımızı belirledikten sonra işlem tamam oluyor zaten.

 

 

Çalıştırdığımızda CustomerType alanının dolu olarak geldiğini görüyoruz dataviewer penceresinde J

 

 

 

Dataflow Components, Sources,Destinations , , ,

Comments (2) -

erdem
erdem
9/30/2012 12:34:22 PM #
Öncelikle teşekkürler.
Anladığım kadarıyla artık cacheden okuyoruz bilgileri herhangi bir yere başvurmuyoruz.Peki ya önbelleğe attığımız veri de değişiklik varsa ve güncellememiz gerekiyorsa ne yapacağız?Bir de dosya sisteminde önbellekleme yapmazsak sürekli hafızada mı tutacak bilgileri?_
4/4/2013 12:27:10 AM #
eğer cache kullanılacaksa execution time sırasında değişmeyeceği varsayılan veriler için kullanılmalıdır. Eğer runtime sırasında değişecek veriler ise burada Cache Mode No Cache olarak belirlenmelidir. ama bu durum performans kayıplarına yol açabilir. ÖZellikle büyük tablolarda sadece değişen verileri alarak entegrasyon yapmalısınız. Literatürdeki adıyla: Change Data Capturing

Add comment




biuquote
  • Comment
  • Preview
Loading