Informatica da Temp Tablo ile Performans Artırma

 

Merhabalar,

Bu yazımda Informatica ile data aktarımı sırasında performans kazancı elde etmek amacıyla sıkça başvurulan yöntemlerden biri olan Temp tablo ile veri aktarımını anlatacağım.

Temp tablo denildiğinde DB lerde kullandığımız geçici tablolar aklımıza gelse de burada kullandığımız anlamı farklı olarak karşımıza gelmekte. Source tan target a veri aktarımı sırasında Lookup, Join gibi işlemlerle data kontrolü yaparak veriyi insert, update işlemleri yaptığımız için veri büyüdükçe bu işlem daha uzun sürelerde, daha performanssız bir şekilde gerçekleştirilebilmekte. Bu nedenle bir tabloda(temp) source tan okuduğumuz verinin yeni bir kayıt mı yani insert, target ta bulunan bir kayıt mı yani update mi yapılacağını belirtmek adına her satırı işaretleyoruz. Yani Temp tablo fiziksel olarak target ın birebir aynısı, -bazı durumlarda ekstra kolon eklenebilir- olarak oluşturulur. Daha sonra Temp tablodan okuduğumuz dataları doğrudan target tabloya gerekli işlemleri yaparak aktarıyoruz. Böylece milyonluk tabloları update ederken bulk şekilde insert, update yaptığımız için daha performanslı bir şekilde bu işlemlerimizi yapabilemekteyiz. Tamamını Okuyun…

Reklamlar

Informatica Partitions

Merhabalar,

Partition konusu veri tabanları(db) ile ilgilenen herkesin hemen hemen herkesin karşısına gelmiş önemli konulardan biridir. Bu yazıda benim bahsedeceğim db partitioning ten tamamen farklı olan Informatica da Partition konusu olacak.

Db partition, daha doğrusu table partitioning te tabloyu fiziksel olarak bölmek diyebiliriz. Özellikle çok fazla data içeren tabloların üzerinden işlemler yapmak zorlaştığı için sıkça başvurulan bir yöntem olarak karşımıza çıkmakta.

Informatica Partition ın uygulamamızdaki temel amaç Table Partition ile aynı, yani: Performans. Ama sadece amaç aynı, uygulama kısmı tamamen farklı.

Informatica da mapping lerimizi çalıştırmamız sırasında çeşitli bottleneck gibi performansı sorunları ile karşılaşırız. Performans arttırmak için birçok yöntem uygulayabiliriz, best practice lere göre hareket bile bottleneck in önüne geçmemizde önemli yararlı sonuçlar doğuracaktır. Best practice lere göre hareket etsek de performansımız hala düşük, yetersiz olabilir. Bu gibi durumlarda sıkça partition yöntemine başvurulur. Partition Informatica lisansı ile birlikte gelmeyip, ayrıca satın alınan bir özelliktir. Eğer bu yeteğe sahipseniz birazdan bahsedeceğim ciddi Performans kazançlarına sahip olabilirsiniz.

Informatica WF yi çalıştırdığımızda bir seferde bir data geçebilir. Yani pipeline tek bir thread olarak çalışır. Amacımız, Partition ile birlikte WF yi multi thread çalıştırmak. Yani bir seferde birden fazla datayı source-target arasında işleme. Kaç tane Partition oluşturursak o kadar çok thread oluşturmuş oluruz, yani 7 Partition oluşturursak wf çalıştırdığımızda tek seferde 7 satır veri aynı anda source tan target a doğru işlenmeye başlanacak.

Partition oluşturmayı, mevcut pipeline ımızı kopyalayarak çoğalttığımızı böylecek aynı anda Partition sayısı kadar pipeline ın çalıştığını, yani pararlel olarak dataların işlenmesi olarak düşünebilirsiniz.

Informatica da çeşitli partition çeşitleri bulunmakta. Bunlar:

  • Database partitioning: Oracle ve IBM DB2 için kullanılabilir bir yöntem. Informatica Integration Services, DB lerdeki tablolarda mevcut partition larin ilgili node larından datayı sorgular.
  • Hash auto-keys: The PowerCenter Integration Services sıralanmış portları key gibi düşünür, bunları sıralar ve pipeline a böler.Rank, Sorter, and unsorted Aggregator transformations ile birlikte kullanılır. Bunun sebebi bu task ların Data Integrity sinin diğer partition yöntemleri ile bozulabilmesi. Demo da bu konuya değineceğim.
  • Key range: Her partition belirlenmiş key aralığındaki datayı tutar.
  • Pass-through: Bir partitiona data yüklemeya başlar, diğer partition point ile karşılaşınca diğerine geçer. Default partitionin methodu olmakta.  Datanın distribition ında herhangi bir değişiklik yapmayıp, sadece datayı pipeline lara ayırmak isteniyorsa kullanılabilir.
  • Round-robin: Block olarak datayı ayırır aynı sayıda dataya sahip olur her block. Load balancing gibi konular söz konusu ise kullanırız. Her bir partition eşit sayıda datayı geçirir.

 

Partition sırasında memory kullanımı artacağı yeterli memory e sahip olup olmadığımızı önemli bir nokta olarak karşımıza çıkmakta.

Demo üzerinden Informatica da Partition konusunu inceleyelim.

Amacımız STG04.Numbers tablosundaki dataları STG04.TRG_Numbers tablosuna tekrarsız bir şekilde aktarmak.

partition1.PNG

Aynı yapıda STG04.TRG_NUMBERS tablosu oluşturuyorum.

Power Center da mapping i oluşturuyoruz.

partition2

Kayıtları tekrarsız bir şekilde Target a aktarmak istediğimiz için Aggregator Task ını kullanıyorum. Agg. Task ın performansını artırmak amacıyla Sort Task ı kullanıyorum. Örneğimiz için gerekli değil fakat gerçekte datalarımız daha büyük olduğu için Sort u Agg. Task tan önce kullanmak performans açısından faydalı olmakta. Sort lanmış data için cache te daha az yer tutulur.

Sort Task ında key kolonunu seçerek hangi kolona göre sort lama işlemini yapacağımızı belirtmemiz gerekmekte.

partition3.PNG

Aggregator da, hangi kolon üzerinden Group lama yani bizim örneğimiz için Distinct işlemini yapacağımızı belirtmek üzere GroupBy ı belirtiyoruz.

partition4.PNG

Mapping i kaydedeip, WF u oluşturmak üzere WorkFlow Manager ekranına geçiyoruz.

partition5.PNG

Datamızın çok fazla olduğunu performans artırmak amaçlı Partition oluşturacağımızı düşünerek bu örneği gerçekleştirdiğimizden Session Task ın Partition özelliğini ayarlamamız gerekmekte.

Session Task >> Mapping >> Partitions (Sol alt köşe)

partition6.PNG

Default ta Partition sayısı 1 olarak karşımıza çıkmakta. Tek seferde tek data aktarılır. Bir seferde multi data aktarabilmek için daha doğrusu 2 data aktarımı yapabilmek için totalde 2 partition a ihtiyacım var. Yani bir partition daha oluşturmamız gerekmekte.

partition7.PNG

SQ yu seçip Edit Partition Point i seçiyoruz. Add dedikten sonra bir Partition daha ekliyoruz.

Partition Type olarak Pass Through u seçiyoruz. Sort, Agg.  ve Target Task larının da Pass Through olarak belirliyoruz.

partition8.PNG

WF yi çalıştırıp sonuca baktığımızda, 11 satır verinin source geldiğinin her partition dan 8 satır verinin aktarıldığını görebilmekteyiz. Yanlış bir sonuçla karşı karşıya kaldığımız aşikar. Amacımız 11 satır  source tan gelen verinin distinct bir şekilde target a aktarılmasını sağlamaktı. Oysaki her iki Partition da 8 er satır veri Target a aktarılmış. Olması gereken toplamda 8 satır verinin  Partition lardan geçerek Target a aktarılması. İşte burada kritik bir nokta ile karşı karşıyayız. Performans artırmak amaçlı kullandığımız Partition yöntemleri Data Integrity i bozabilir. Bunun sebebi her yöntemin her Task ile mantıklı sonuç vermemesi. Zaten farklı Partition Yöntemlerinin olmasının sebebi değişen amaçlara göre tutarlı sonuç üretebilmek adına doğru yöntemi seçmek.

partition9.PNG

Bizim örneğimizdeki kritik nokta Sort Task ı. Sort Task ı için Partition yöntemi olarak Pass Through u seçmek tutarsız sonuçlara bizi yönlendirebilir. Bunun sebebi Pass Through ile verinin distribition ında hiçbir şeyi baz almayıp sadece dağıtması. Böylece farklı Partition larda aynı data olup, aynı datalar Target a aktarılabilmekte ki bizim örneğimizdeki yanlış sonucu oluşturan neden bu.

Pass through yerine sıralı bir şekilde Partition lara datayı aktarıp, aynı datanın farklı partition larda olmayacağından emin olduğumuz Hash-Auto Key yöntemini seçebiliriz. Bu yöntem ile datalar sıralanıp, bu port ları key gibi düşünerek Partition lara bölebiliriz.

Partition 1: 1 2 3 3 4 4

Partition 2: 5 5 6 7 8

mantığında data Sort Task ta bölüneceği için herhangi bir data tekrarlaması söz konusu olmayacaktır.

Sort Task ın Partition Type ını Hash Auto olarak güncelliyoruz.

partition10

WF tekrar çalıştırdığımızda, Partition lardan toplam 8 satır data geçtiğini görebilmekteyiz.

partition11

 

Sonuç olarak,

Partition multi pipeline oluşturmuşçasına aynı anda birden fazla datanın source tan target a doğru işlenmesini sağlayan Performans arttırıcı bir yöntemdir. Fakat, task ların çalışma mantığının farklı olmasını göz önüne aldığımızda Partition Type larının farklı sonuçlar doğuracağını ortadadır. Bu nedenle Performans artırırken, Data tutarlılığınızı bozmamak adına Partition Type larını dikkatli seçmenizi öneririm.

İyi günler,

Şeydanur Sandıkçı

Parameters In Informatica

Merhabalar,

Bu yazımda Informatica da parametre kullanımından bahsedeceğim. Öncelikle Informatica dan bağımsız olarak Parametre nedir, neden kullanırız, Informatica da Parametre nasıl oluşturulmakta gibi konulara değineceğim.

Günümüzde, iş birimlerinin proseslerinin karmaşıklığı nedeniyle ortaya çıkan mimarilerde karmaşık yapılarla oluşturulmakta. Özellikle DW tasarımlarını göz önüne alırsak, oldukça Enterprise logic lar ortaya çıkmakta. Konu bankacılık, Telco olursa mimarilerin karmaşıklığı daha da artmakta.

Karmaşıklık, logic lerin zorluğunun yanı sıra günümüzde değişen koşullara ayak uydurmak zorundayız. Business logic imizi bu değişen koşullar basit de olsa implemente etmek oldukça uzun süreler alabilmekte. Bu değişiklikleri kısa sürede yapmak, yeni ihtiyaçlara cevap verebilmek  için logic imizin oldukça flexible olması gerekmekte. Özellikle bahsetmiş olduğumuz karmaşık business larda, flexible lık daha da önem kazanmakta, çünkü bir değişiklik yapmak istediğimizde çok karışık noktalara gelinebilmekte. Amaç, tek bir yerde küçük bir değişiklik yapmakken, birden fazla yere elimizi değdirmemiz gerekmekte ki başarılı bir sonuca ulaşmak hem zorlaşmak, hem da olması gerekenden fazla vakit alabilmekte.

Oysaki amacımız bizlerin daha verimli çalışması daha verimli sonuçlar ortaya koyması, işi daha az eforla yaparak, hem bizlerin hem de iş biriminin mutlu olması diyebiliriz. Bu nedenle Data Integration konusunda değişen koşullara ayak uydurabilmek amacıyla Parametre kullanımı bizler için vazgeçilmezler arasında. Tamamını Okuyun…

Read Multiple Files With Informatica

Merhabalar,

Bu yazımı bir klasörün içindeki birden çok dosyanın nasıl okunacağı anlatmak amacıyla ele alıyorum.

Buradaki kritik nokta her bir file ın tek bir mapping in çalışması ile okunmasının sağlanması. Yani bir dosyayı okuduktan sonra diğer dosyayı okumaya başlamasını sağlamamız gerekmekte. Böylece birden fazla dosyanın ilgili target a aktarılması için birden çok mapping hazırlamak zorunda kalmayacağız.

SSIS te Foreach komponenti ile yaptığımız bu işlemi Informatica Power Center da Foreach Task ı olmadığı için farklı yöntemle gerçekleştireceğiz.

Şirketlerin haftalık satışlarını ayrı ayrı excel dosyalarında tuttuklarını düşünürsek, geçmiş 5 yıllık satış verisini database e aktarmamız gerektiğinde  oldukça ihtiyaç duyacağımız bir yöntem olacaktır. 52×5 =260 tane mapping oluşturmak tabiki başvuracağımız bir yöntem olmayacaktır.

Demo üzerinden ilerleyerek çalışmamızı daha kalıcı hale getirelim.

İki farklı txt dosyasında Employee bilgilerini sakladığımızı düşünelim.

txt1.PNG

txt2.PNG Tamamını Okuyun…

Informatica Incremental Süreçlerin Yönetimi-2 (SCD Type-2 Version Column)

Merhabalar,

Önceki yazılarımda Informatica nedir, Informatica ile ETL nasıl geliştirilir gibi konulara değinmiştik. Sonrasında veri ambarı projelerinin vazgeçilmez unsuru olan Incremental sürecin ne olduğundan, Slowly Changin Dimension ın bu süreçlerde nasıl kullanıldığında, SCD type larından bahsetmiştik. SCD Type-1 ve Type-2 ile ilgili demo çalışmaları yapmıştık.

Bu yazımda Type-2 yi uygularken kullandığımız diğer bir yöntem olan Version Column yöntemini inceleyeceğiz.

Yapacaklarımızı kısaca özetlemek gerekirse, ilgili employee nin city bilgisi değiştiğinde her seferinde Flag imizi 1 artıracağız. Böylece max(Current_Flag_Number) a sahip satırlar en güncel verimiz olmuş olacak.

m_Load_TRG_Employee_Version_Number adında mapping oluşturuyorum.

Target tablomuzu bu örnek için kendimiz oluşturalım. Target Designer ekranına gelip, üst panelden Target >> Create diyoruz. TRG_Employee_Version olarak isimlendiriyorum target tablomu. Örneğimde, Oracle ı kullanacağım için Database type olarak Oracle seçiyorum. SQL kurulu ise makinenizde Microsoft SQL Server ı seçebilirsiniz.. Tamamını Okuyun…

Informatica Ile Incremental Süreçlerin Yönetimi-2 (SCD Type-2 Current Flag Column)

Merhabalar,

Önceki yazımda Incremental süreç nedir, nasıl bir ihtiyaç sonucu uygulamaya başlarız, SCD Type ların dan ve en son olarak da SCD Type-1 ile ilgili bir örnek yapmıştık.

Bu yazı ile SCD Type -2 yi incelemeye devam edeceğiz.

Öncelikle Type-2 yi ne gibi ihtiyaçlar doğrultusunda kullanmalıyızı konuşalım. Verinin değişim historisi sizler için önemli ise Type-2 sizler için uygun diyebiliriz. Yani veri güncellense de yeni hali ile birlikte eski halini daha doğrusu hallerini tutmak  gibi ihtiyaçlarınıza bu yöntemle birlikte cevap verebilirsiniz.

Type-2 yi farklı yöntemlerle uygulayabilirsiniz. Bunlar:

  • Current Flag Column: Bu yöntemi uygularken tabloda verinin en son güncellenen halinin hangi satır olduğunu anlamak için Flag lemek için yani Flag kolonuna ihtiyacımız bulunmakta. Veri güncelse 1, değilse yani eski veri ise 0 olarak flag leriz. Böylece güncel dataları bulmak istediğimizde where CurrentFlag=1 dememiz yeterli olacaktır. İlgili kayıdın tüm eski versiyonlarında Flag=0 olacaktır.
  • Version Number Column: Bu yöntem, flag lemekle hemen hemen aynı. Tek fark version numarası 1 artarak devam eder. Yani initial load da version number ı 1 olarak insert edip, veri güncellenirse 2, tekrar güncellenirse 3 olarak devam edecektir. Versiyon numarası veri değiştikçe artarak devam edecektir.
  • Date Range Columns(StartDate-EndDate): Bu yöntemde verinin geçerli olduğu tarih aralığı tutulur. Yukarıdaki yöntemlerle aynı amaç doğrultusunda yani verinin full history sini tutmak için bu yöntem uygulanabilir. Tek fark verinin değişimi ile ilgili daha ayrıntılı bilgi tutmuş oluyoruz. Tamamını Okuyun…

Informatica ile Incremental Süreçlerin Yönetimi-1

 

Merhabalar,

Bir önceki yazımda Informatica nedir, nasıl ETL geliştirilir gibi konuları incelemiştik. Bu yazımda dw projelerinin vazgeçilmez unsuru olan Incremental süreçlerden bahsedeceğim. Incremental süreçler uzun bir konu olduğu için bu yazı ile tamamlamayacağız konuyu.

İlk olarak Incremental süreçler nedir, neden ihtiyaç duyarız? 

Incremental adı üstünde kademeli olarak artan süreçlerin yönetimi. Şirketlerin bazı dataları incremental, bazılarının delete insert gibi farklı yöntemlerle bir yerden başka bir yere aktarılması gerekir. Çoğu şirkette farklı business lar için bu yöntemlerin tamamı uygulanır.

Örneğin, personel bilgilerinin tutulduğu bir tablonuz olduğunu düşünelim. Personelin telefon numarası değişirse eski numarasını tutmak anlamlı olmayacağı için numarayı update yaparsınız. Personelin çalıştığı şehir değişirse, yeni şehiri insert edip, eski şehirin eski olduğuna dair flag leme yaparsınız(insert-update). Bu flag leme farklı şekillerde olabilir. Bunu yeri geldiğinde inceleyeceğiz. Her gece personel tablosunun truncate insert ile de doldurabilirsiniz. Yani kısaca yöntem seçimi sizin business anlayışınıza ve ihtiyaçlarınıza göre değişecek bir durum.

Bu yazıda Incremental süreçlerin yönetimiyle ilgileneceğiz. Incremental aktarımda veri değişse de eski veri silinmez, yeni kayıtla birlikte db imizde kayıtlı olarak durur.

Yeni ve eski kayıtları birbirinden ayırt edebilmek için farklı yöntemler kullanabilirsiniz. TYPE 2 ile ilgili kısımda açıklayacağız bu yöntemleri. Tabi burada eski veriyi nasıl tutmak istediğimiz de önemli bir nokta. Tüm history i tutmak istiyor muyuz, yoksa belli bir kısmını mı? Bu konuyu birazdan irdeleyeceğiz.

Incremental süreç yönetimi için bir kaç yöntem var. Bunlardan başlıcaları: