Ö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.
SCD Type-2 Current Flag yöntemi ile ilgili bir örnek üzerinden ilerleyelim.
SDBU schemasında bulunan Employee tablosundaki EmployeeId, FirstName, LastName, City, PhoneNumber, Gender, Age verilerine ihtiyacım olduğunu, bunları tasarlamakta olduğum veri ambarına DimEmployee adı ile boyut olarak eklemek istediğimizi düşünelim. Bu sırada çalışanlarımızın city bilgisi değişirse, employee lerin eski city bilgilerini de dw mde tutmak istediğimizi farz edelim. Bu senaryo üzerinde SCD Type-2 Current Flag yöntemi ile city nin değişimini de göz önüne alarak OLTP sistemimizden DW mize aktarıma başlayalım.
Power Center ı açtım, source umu ekliyorum. Ihtiyaç duymadığım kolonları siliyorum.
Target ı oluşturmak için oluşturmuş olduğumuz source u target designer a sürükleyip bırakıyoruz. TRG_Employee olarak isimlendirip, Current_Flag kolonu ekliyoruz.
Target tabloyu db de oluşturmak için Generate and Execute SQL ile tabloyu create ediyoruz.
Mapping e geçebiliriz. Create mapping diyerek başlıyoruz.
Source umu sürükleyip bırakıyorum mapping ekranına. Bir önceki makalemde target ta ilgili verinin olup olmadığını belirlemek için Lookup kullanmıştık. Source ve target ı bir araya getirmiştik diyebiliriz kısaca. Bu yazımda bu işlemi Join Transformation ile yapalım.
Target ile source u joinleyebilmek için target ı source olarak ekliyorum. Source belirleme işlemimdeki gibi Source Designer ekranından TRG_Employee yi seçiyoruz. Source olarak belirlediğimiz TRG_Employee i de Mapping ekranına sürükleyip bırakıyoruz.
Join Transformation ı mapping e ekliyoruz. Employees ve TRG_Employees in çıkış portlarını Join in giriş portu olarak sürükleyip bırakıyoruz. TRG_Employees ten gelen portları TRG_, source tan gelenleri SRC_ ön eki ile isimlendiriyorum.
Aynı zamanda Join lediğimiz tablolardan hangisinin Detail, hangisinin Master tablo olduğunu belirtmemiz gerekmekte. Otomatik olarak Join Transformation a ilk olarak Employees tablosunun portunu sürüklediğimiz için Detail tablo olarak onu seçiyor. Detail ya da Master tablo olarak seçmenin önemini şöyle açıklayabiliriz: SQL deki Left outer join mantığını düşünelim. Left Join condition un soluna yazdığınız tablonun tüm kayıtları, sağında yazdığınız tablonun eşleşen kayıtları gelir, eşleşmiyorsa null olur. Power Center da da Detail tablo nun tamamı Master tablonun eşleştiği kadarı döner, eşleşmeyen satırları null olur. Örneğimizdeki amacımız “source ta olan EmployeeID ler target ta var mı yok” u bulmak olduğu için Source ve target tabloyu Left Join le birleştirmemiz, Source tabloyu Detail tablo olarak seçmemiz gerekmekte.
Condition tabından da EmployeeID ler üzerinden verinin target tabloda olup olmadığını kontrol etmek istediğimi söylüyorum.
Önemli bir nokta Join Type ımın ne olacağı belirmek olacak. Properties tabına geldiğimizde, 4 tane Join çeşidi karşımıza gelmekte.
Normal Join: SQL deki inner join
Master Outer Join: SQL deki Left Join gibi düşünebilirsiniz.. Detail tablonun tüm kayıtları, master tablonun eşleşen kayıtları gelir, Detail ile eşleşmeyenlere null insert edilir
Detail Outer Join: SQL deki Right Join gibi düşünebilirsiniz, Master Outer Join in tam tersi yani. Master ve Detail tablonun eşleşen kayıtları ve Master tablonun tüm kayıtları döner.
Full Outer Join: SQL deki full join le aynı. Eşleşen ve eşleşmeyen tüm satırları getirir, eşleşmeyenlerin karşısına null yazılır.
Biz Detail tablonun tüm kayıtlarını, Master tablonun eşleştiği kayıtlarını istediğimiz için Master Outer Join seçiyoruz. Önceki adımda Employees tablosunu Detail tablo olarak seçmiştik.
Source ve target veri setlerimizi yan yana getirdik diyebiliriz. Veri target ta yoksa insert, eğer varsa ve city değişmişse eski city nin bulunduğu satırın flag ini 0 olarak update, yeni city nin bulunduğu satırı insert yapabilmemiz için, insert ve update olma koşullarını belirtmemiz gerekiyor. Bunun için Expression Transformation ekliyoruz.
Source tan gelen kolonların tamamını, Target tan gelen kolonlardan EmployeeID, City, kolonlarını Expression Transformation a ekliyorum. Bunun sebebi target taki diğer kolonların değişimi ile ilgilenmediğim için gereksiz port ları bağlamıyorum. Best Practise te gereksiz port ları bağlamayın denmekte.
Insert koşulu, update koşulu, yeni veri insert indeki flag, veri update olduğundaki flag i belirtmek üzere 4 Port oluşturuyorum. Bunlar çıkış portu olacağı için Input tiklerini kaldırmayı unutmayın.
Insert koşulu target ta EmployeeID yoksa yeni bir employee gelmiş demektir. Yani TRG_EmployeeID null ise insert yapmalıyız anlamına gelmekte.
Bir önceki örnekten farklı olarak insert ve update koşullarını tek bir port ta yazalım. İç içer IIF le koşulumuzu aşağıdaki gibi yazıyoruz.
Her yeni kayıt için Current_Flag e 1 olarak insert, eski veri için 0 olarak update işlemi yapmak üzere Flag lerimi belirtiyorum. Son durumda şu şekilde Port larımı oluşturmuş oluyorum.
Insert ve update olarak iki farklı işlemi yaptırabilmek için 2 Filter transformation ekliyorum. Insert ve update olaak isimlendiriyorum. Insert ile yeni kayıt girişi, update ile ilgili EmployeeID ye ait eski kayıdın Flag ini 0 olarak update etme işlemini yapacağım.
Insert Filter Transfromation a aşağıdaki gibi ilgili port ları sürükleyip bırakıyorum.
Filter transformationa çift tıklayıp hangi koşulu sağlayan dataları filtreleyip, Target a insert etmemize imkan sağlayacağını belirtiyoruz. Yeni ve update olmuş kayıtları insert yapmak istediğimiz için, insert ya da update koşulunu sağlayan verileri yeni kayıt olarak insert edeceğimizi belirtiyoruz.
Daha sonra Target ın giriş portu ile bağlıyoruz.
Sıra geldi ilgili EmployeeID ye ait city güncellendiğinde eski city ye karşılık gelen Current_Flag i 0 olarak update etmeye.
Eklemiş olduğum Filter Transformation a ilgili portları bağlıyorum.
Filter transformation un filtreleme koşulunu belirtiyorum.
Update işlemi yapacağımız için Update Strategy Transformation ekliyoruz. DD_Update olarak Update Strategy Expression i belirtiyorum.
EmployeeId e göre Current_Flag i update yapacağımız için iki port u Target a bağlıyoruz.
Mapping imizi kaydedip, valid olduğundan emin olduktan sonra Workflow Manager a geçip mapping imizi çalıştırabiliriz.
Workflow da nasıl işlemler yaptığımı şu makalemde anlattığım için ayrıntıya girmiyorum. Workflow u çalıştırıyorum. Workflow Monitor dan data akışını kontrol ediyorum.
106 satır veri varmış source Employee tablomda, target tablom boş olduğu için 106 satır veri aktarıldı. Tekrar çalıştırdığımızda hiçbir veri akışı olmayacaktır target.
Yukarıdaki görselde görebileceğiniz üzere 86499 kodu employee nin City sini Sinop olarak update ediyorum. Bu update işlemini source tablomda olan Employee de yapıyoruz tabiki.
Tekrar workflow u çalıştırıyorum. 1 kaydın güncellendiğini görüyoruz.
Bu şekilde verimiz güncellendiğinde eski kayıtları saklamak için Flag leme yöntemi ile hem verinin yeni halini hem de eski versiyolarını saklayabiliriz.
Bu yazımda Incremental süreçlerde kullanılan SCD Type-2 Current Flag yöntemini inceledik. Bir sonraki yazımda Version Number yöntemi ile Incremental süreçlerimizi nasıl yönettiğimizi inceleyeceğiz.
Keyifli okumalar…
Şeydanur Sandıkçı
Bunu paylaş:
Twitter
Facebook
Bunu beğen:
Beğen Yükleniyor...
Etiketler:bi, bi nedir, current flag column, developing, dwincremental, incremental processing, informatica, informatica etl, informatica nedir, informatica power center, informatica power center etl, informatica power center nedir, informaticaetldeveloping, informaticaincremental, informaticanedir, iş zekası nedir, işzekası, microsoft, power center etl, power center nedir, scd nedir, slowly changing dimension nedir, slowly changing dimesion, what is the informatica
« Previous post
Next post »
Bir Cevap Yazın Cevabı iptal et
Yorumunuzu buraya yazın...
Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:
E-posta (zorunlu) (Adres hiçbir zaman paylaşılmayacaktır)
İsim (zorunlu)
Web sitesi
WordPress.com hesabınızı kullanarak yorum yapıyorsunuz.	( Çıkış Yap / Değiştir )
Google hesabınızı kullanarak yorum yapıyorsunuz.	( Çıkış Yap / Değiştir )
Twitter hesabınızı kullanarak yorum yapıyorsunuz.	( Çıkış Yap / Değiştir )
Facebook hesabınızı kullanarak yorum yapıyorsunuz.	( Çıkış Yap / Değiştir )
Vazgeç
Connecting to %s
Yeni yorumları bana e-posta ile bildir.
Eposta yoluyla yeni yazıları bana bildir.
Δ
Arama:
Son Yazılar
Informatica da Temp Tablo ile Performans Artırma
Informatica Partitions
Parameters In Informatica
Read Multiple Files With Informatica
Informatica Incremental Süreçlerin Yönetimi-2 (SCD Type-2 Version Column)
Son Yorumlar
INFORMATICA NEDIR? için osman
INFORMATICA NEDIR? için seydanursandikci
INFORMATICA NEDIR? için ekrem
Power BI da Harita Kullan… için Mehmet
Power BI da Harita Kullan… için seydanursandikci
Önerilen Siteler
datawarehouse.gen.tr
yusufbogatepe.com
Bloga e-posta ile abone ol
Bu bloga abone olmak ve e-posta ile bildirimler almak için e-posta adresinizi girin.
Diğer 34 takipçiye katılın	
E-posta Adresi:	
Abone ol
WordPress.com'da ücretsiz bir web sitesi ya da blog oluşturun.
Gizlilik ve Çerezler: Bu sitede çerez kullanılmaktadır. Bu web sitesini kullanmaya devam ederek bunların kullanımını kabul edersiniz.
Çerezlerin nasıl kontrol edileceği dahil, daha fazla bilgi edinmek için buraya bakın: Çerez Politikası	