Data Warehouse Yazı Dizisi-3 Lookup Komponenti

Data Warehouse Yazı dizisinin ilkinde data warehouse nedir, niçin ihtiyaç duyulur, veri ambarı ihtiyacına nasıl karar verilir gibi konulara değinmiştik.

Data Warehouse Yazı Dizisi – 2 de veri ambarı oluşturmaya karar  verdikten sonra nerden başlamalıyızdan bahsetmiştik.

Bu yazımda veri ambarı oluşturma sırasında gerçekleştirilen ETL işlemlerinde çokça kullanılan Lookup komponentinden bahsedeceğim.

Lookup ı verinin kaynaklardan okunup hedef tablolara akışı sırasında eşleşip eşleşmemesine göre işlem yaptırmak için kullanırız. Tabiki eşleşip eşleşmemeyi bir ya da daha fazla kolon üzerinden yapabiliriz.

Örneğin, satış verilerimizden oluşan bir data mart oluşturuyor olalım. Satış verilerimizi ürün, zaman boyutunda analiz ediyor olalım. Bu noktada FactSales, DimProduct, DimTime tabloları en basit anlamda ihtiyaçlarımız için yeterli olacaktır. Farklı business durumlarında örnek olarak tasarladığımız star schema durumunda çıkıp snowflake yapıda bir dw yapısı oluşturmak gerekebilir.sales-star-schema

Aşağıdaki örneği göz önüne alarak dwmize veriyi aktaralım. İlk olarak dim tablolarımıza sonrasında fact tablolarımıza data yüklememiz gerekmekte. Neden bu sırada veriyi yüklememiz gerektiğini hemen bir örnekle somutlaştıralım: Barkod okuyucusu olan bir bakkal ürünlerini satmakta. Daha önceden barkodu tanımlanmamış bir ürünün satışı mümkün olmaz. Bu nedenle yeni bir ürün satışına başladığımız öncelikle bunu ürün tablomuza eklemeli yani barkodunu oluşturmalıyız, sonrasında sistem artık bu ürünü tanıdığı için ürünün satışına başlayabiliriz. Şimdi kendi örneğimize dönersek, önce DimProduct tablomuza ürünlerimizi aktarmalıyız, sonrasında FactSales tablomuza bu ürünlere ait satış verilerini yükleyebiliriz.

Aşağıdaki diagramı göz önüne alarak Dimproduct tablomuza veriyi aktardıktan sonra FactSales tablosuna veri aktarımı için ETL paketi dizaynı yapacağımızı düşünelim.

lookup

SQL server üzerinde  aşağıdaki gibi satış ve ürün tablolarımız var .

lookupdata

FactSales tablomuza veriyi aktarmak için SSIS üzerinden paket hazırlayacağız. Data tools tan Integration Services projesi açtıktan sonra aşağıdaki gibi bir ekranla karşılaşacağız.

Data flow task ekliyoruz Control Flow ekranındayken. Sonrasında data aktarımı yapabilmek için data flow ekranına  geçiyoruz.

dt1.PNG

Veriyi SQL den okuyacağımız için OLE DB Source a ihtiyacımız var.  InternetSales db sindeki Sales tablosuna erişimimiz için aşağıda gibi OLE DB Source tan tablomuzu seçiyoruz. İstersek query yazarak da sadece ihtiyacımız kadar veriyi okuyabiliriz ki best practise e göre  yaptığımızın bu olması gerekmekte. Bunun sebebi ihtiyacımız olmayan kolonları da okuyarak sistemi yormamak.

dt2.PNG

FactSales tablosu ile DimProducts tablosu arasındaki ilişkiyi ProductId ler üzerinden kuracağımız için, satışını yaptığımız ürünlerin ProductID lerine ihtiyacımız var. Sales tablosunda productname ler kayıtlı olduğu için, bu product lara ait id leri product tablosundan alabiliriz. Bu noktadan lookup ı kullanarak bu id lere erişebiliriz. Diyeceğiz ki; sales tablosundaki productname lerle product tablosundaki productname leri eşleştir, eşleşen satışları productid leri ie birlikte  FactSales e ekle, ya eşleşmeyenlerde??

Ürün eşleşmemesi demek oluyorki; DimProduct tabloma henüz kaydetmediğim bir ürünün satışını yapıyorum. Ya yanlış isimle ürün satışı yapılmış ya da DimProduct tabloma henüz bu ürünü eklemedim. İşin içinde bir gariplik olduğu aşikar olduğu için, eşleşmeyen ürünlere ait kayıtları başka tabloya kaydedeceğim ki bu durumun nedenlerine bakabileyim.

Source tan sonra Lookup komponenti ekliyoruz, source un çıkış portunu Lookup a bağlıyoruz. Lookup ın ayarlarını yapılandırmak için üzerine çift tıklıyoruz. Karşımıza açılan ekranda cache ve verilerin eşleşmemesi sonucunda nasıl bir işlem yapmak istediğimizle ilgili segmeler yer almakta. Productname ler eşleşmiyorsa, eşleşmeyen product ları ayrı bir tabloya insert etmek istediğim için Specify how to handle rows with no matching rows ayarını Redirect rows to no match output seçeneğini seçiyorum. Böylece unmatching portu oluşmuş olacak. Bundan sonra eşleşmeme durumda hangi işlemi yapacaksam bu porttan çıkan verilerle yapabilirim.

lookuptransform

Connection segmensinden source tan gelen veriye lookup yapacağım veriyi seçmem gerekiyor. InternetSales db sindek Products tablosunu seçiyorum.

lookuptrans2

Column segmesinden bu iki veri setinin hangi alan üzerinden lookup işlemi yapacağını belirtmemiz gerekmekte. Productname ler üzerinden lookup işlemi yapıp, productid bilgisine erişmem gerekmekte. Bu nedenle iki farklı veri setindeki productname leri sürükle bırakla eşleştiriyorum, ProductId nin yanındaki kutucuğu işaretliyorum. Böylece productname ler eşleştikçe onların id lerine erişmiş olacağım.

lookuptrans3

ProductId lere eriştiğimize göre artık Fact tablomuza satış verilerimizi insert edebiliriz. OLE DB Destination ekleyip, Lookup ın matching bacağını bağlıyoruz.

lookuptrans4

Unmatching port unu da başka bir OLE DB destination a bağlıyoruz. Eleşmeyen verileri de burada tanımlayacağım tabloya insert edeceğiz. Her iki OLE DB Destination un üzerine çift tıklayarak Matching için FactSales i, unmatching için yeni bir tablo oluşturuyorum.

lookuptrans5

Paketi çalıştırıyoruz. Sales ve Product tablolarındaki productname ler eşleştiği için 4 satır veri FactSales e insert edildi.

lookuptrans6

Product tablomdaki Printer ı PC olarak update ediyorum.

lookuptrans7

Tekrar paketi çalıştırdığımızda 3 satır veri eşleştiği için FactSales e insert ediliyor, 1 satır veri eşleşmeyen portundan oluşturmuş olduğumuz NoMatching tablosuna aktarılıyor.

Gördüğümüz üzere lookup ile verinin tutarlı bir şekilde DW ye aktarımını sağlayabilmekteyiz. YALNIZ!! paketi ikinci çalıştırışımızda daha önceden FactSales e aktardığımız verileri tekrar aktarmış olduk. Bunun gibi veri duplicate ine yol açmamak için veriyi Incremental olarak yüklemeliyiz. Yani aktarmış olduğumuz veriyi tekrar aktarmamız lazım yanlış sonuçlara ulaşmamak için.

Incremental Data Loading konusuna sonraki makalemde değineğim.

lookuptrans8

Keyifli okumalar,,

Ş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. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: