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.

ODS schemasındaki ODS_PERSONNEL tablosunu source olarak kullancağız. Öncesinde tablodaki null ve duplicate Personnell_ID satırlarını siliyoruz.

DELETE FROM ODS.ODS_PERSONNEL
WHERE EMPLOYEE_ID IS NULL;

DELETE FROM ODS.ODS_PERSONNEL
WHERE EMPLOYEE_ID IN
(
SELECT EMPLOYEE_ID FROM
(
SELECT EMPLOYEE_ID,
ROW_NUMBER() OVER ( PARTITION BY EMPLOYEE_ID ORDER BY EMPLOYEE_ID ) A
FROM ODS.ODS_PERSONNEL
) ASD
WHERE A>1
);
COMMIT;

ODS_Personnel tablosundan sadece ihtiyaç duyacağım kolonları kullanmak üzere seçiyorum, diğerlerini siliyorum. Commit_Time_Stamp kolonunu tabloya daha önce ekleyip, 02/01/2003 değerini insert ettim.

temp5.PNG

Amacımız Employee_ID, Name, Gender_Category, Position_Type kolonlarının history sini takip etmek. Target tablomuz TRG_ODS_PERSONNEL adından oluşturuyoruz.

temp6.PNG

Temp tablo olarak kullanacağımız tabloyu oluşturup, execute ediyoruz. Target tablodan farklı olarak Insert_Update_Flag kolonunun bulunmasının sebebi, verinin yeni mi yoksa update edilecek bir veri mi olduğunu işaretlemek. Source tan gelen veri Target ta yoksa I  harfi ile işaretleyerek Insert edileceğini, eğer varsa U harfi ile update edilmesi gereken bir veri olduğunu işaretliyoruz. U olarak işaretlediğimiz satırı yani ilgili Employee_Id ye ait değerlerin update olması halinde update olmuş kayıdı insert edip, eski kayıdın update date ine de update olmuş satırın insert_date-1 değerini update edeceğiz.

temp3.PNG

Power Center Designer ekranında Mapping i oluşturmaya başlıyoruz.

temp7.PNG

Source u ekledikten sonra TRG_ODS_PERSONNEL tablosunu source taki datalar target ta var mı diye Lookup ile kontrol ediyoruz.

 

Expression ı 3 yeni port eklemek amacıyla kullanıyoruz.

Insert_Update_Flag: IIF(ISNULL(EMPLOYEE_ID),’I’,IIF(SRC_EMPLOYEE_ID = EMPLOYEE_ID AND ( SRC_NAME != NAME OR SRC_GENDER_CATEGORY != GENDER_CATEGORY OR SRC_POSITION_TYPE != POSITION_TYPE),’U’,’X’))

Current_Date: TRUNC(COMMIT_TIME_STAMP)

Update_Date: ADD_TO_DATE(TRUNC(COMMIT_TIME_STAMP),’DAY’,-1) -Eski kaydın update_date ine yeni kaydın insert_date -1 değerini insert etmek amaçlı –

Sonrasında Filter Transformation ile sadece yeni ve update olmuş kayıtlarla ilgileneceğimiz için ‘U’ veya ‘I’ olarak işaretlediğimiz satırları filtreleyerek, Temp tabloya data aktarımını gerçekleştiriyoruz.

temp10

Temp tablodan Target tabloya data aktarımını gerçekleştirmek amacıyla bir başka mapping oluşturuyoruz.

temp11.PNG

Temp tablodan gelen dataları insert ve update olarak iki pipeline a ayırıyoruz. Hem yeni hem de update olmuş kayıtları insert etmek istediğimiz için Insert koşulu olarak aşağıdaki koşulu yazıyoruz.

temp12.PNG

Update koşuluna ise;

temp13.PNG

Insert olacak dataları Target a ilgili portalarını bağlıyoruz.

Update olacak kayıtlar için Update Trans. ile DD_Update komutunu kullanarak update yapılacaklarını belirtiyoruz. PK alanları ile update edilecek alanları yani örneğimiz için Update_Date  portlarını bağlıyoruz.

temp14.PNG

Mappinglerimizi valid ettikten sonra, WF u oluşturuyoruz.

temp15.PNG

Öncelikle Temp tabloda ilgili değişşiklikleri işaretleyeceğiz, sonrasında Target tabloya bu işaretlere(U-I) bağlı olarak gerekli işlemleri yapacağız.

WF u çalıştırdığımızda;

97 satır verinin Temp tabloya aktarıldığını,

temp16.PNG

Temp tablodan okunan 97 satırın hepsinin Insert edildiğini görebilmekteyiz.

temp17.PNG

Source tabloda 86499 Id li Personel in ismini Kenneth olarak güncelliyoruz. Commit_Time_Stamp uniq liği sağlayan alanlarımızdan olduğu için onu da güncellememiz gerekmekte.temp18.PNG

temp18.PNG

Tekrar WF yi çalıştırdığımızda, source tan okunan 97 satır kayıtın 1 satırında değişiklik algılandığı bu nedenle Temp tabloya insert edildiğini görebilmekteyiz.

temp19.PNG

Temp tabloya baktığımızda, değişikliğin update olmuş kayıt olduğunu görebilmekteyiz.

temp20.PNG

Temp talodan okunan update olmuş kayıdın insert ve update pipeline larından ilerleyerek target a aktarıldığını ve güncelleme de yapıldığını görebilmekteyiz.

temp21.PNG

Target a baktığımızda, kayıdın güncellenmiş halinin insert edildiğini ve eski kayıdın Update_Date inin güncellendiğini görebilmekteyiz.

temp22.PNG

Aynı ID li kayıdı tekrar güncellediğimizde en son güncellenmiş kayıdın Update_Date ini güncellemesi gerekecektir. Iki tane eski kayıttan hangisinin en son güncellenmiş satır olduğunu mevcut yapıda sistemin anlamasına imkan yok.

Yapmamız gereken source-target id kıyaslamasında, ‘U’ olarak işaretlediğimiz kayıdın target taki max(insert_date) li olan satırı okumak. Böylece her seferinde en son güncellenmiş kayıda ulaşmış olacağız.

Mapping imizde değiştirmemiz gereken noktaları bir sonraki makalede inceleyeceğiz.

 

Bir sonraki makalede görüşmek dileğiyle.

Şeydanur Sandıkçı

Reklamlar

Etiketler:, , , , , , , , , , , , ,

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: