- Genel içinde
- Yorum bırakın
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.
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.
SQL server üzerinde aşağıdaki gibi satış ve ürün tablolarımız var .
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.
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.
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.
Connection segmensinden source tan gelen veriye lookup yapacağım veriyi seçmem gerekiyor. InternetSales db sindek Products tablosunu seçiyorum.
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.
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.
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.
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.
Product tablomdaki Printer ı PC olarak update ediyorum.
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.
Keyifli okumalar,,
Şeydanur Sandıkçı
Etiketler:data warehouse nedir, data warehouse yazı dizisi, datawarehouse, elt nedir, etl nedir, iş zekası, iş zekası nedir, lookup komponeneti, microsoft, microsoft ssis, microsoft ssis nedir, microsoft veri ambarı, ssis etl, ssis lookup, ssis lookup etl, ssis lookup kullanma, veri ambarı nasıl oluşturulur, veri ambarı nedir, veri ambarına niçin ihtiyaç duyuluru, veriambarı
Son Yorumlar