SSIS ile Merge Joın
Merhaba arkadaşlar. Bu yazımda SSIS (SQL Server Integration Services) ile Merge Join görevini kullanarak farklı kaynaklardaki verileri birleştirip nasıl hedef sisteme yazdırabileceğimizden bahsedeceğim. Ayrıca karşılaşabileceğiniz tüm hataların çözümlerine değinmiş olacağım.
Kullanacağımız kaynaklardan biri AdventureWorks2014 veri tabanı. Buraya tıklayarak indirebilirsiniz. Diğeri ise excel dosyası, onu da kaynakça bölümünde bulabilirsiniz. Örneğimiz için satış yaptığımız çeşitli ürünler olduğunu düşünelim. Veri tabanında bu ürünlere ait bilgilerin yer aldığı bir tablomuz var, fakat çeşitli manuel hesaplamalardan dolayı excelde de veri tuttuğumuzu varsayalım. Başlamadan önce her iki kaynaktaki verileri de incelemenizi tavsiye ederim.
Eğer incelediyseniz haydi başlayalım!
Öncelikle SSIS tasarım ekranının Control Flow sekmesine bir adet Data Flow Task sürükleyip bırakıyoruz ve çift tıklıyoruz. Öncelikle ürün bilgilerimizi çekeceğimiz bağlantı için OLE DB Source alalım. DimProduct tablosunu kullanacağız fakat bu defa data access mode (veri erişim modu) seçimimizi değiştirerek SQL command kullanalım. Açılan text alanına istediğimiz sorguyu yazabiliyoruz, ben bazı sütunları eledim. Preview seçeneği ile verileri kontrol edebilirsiniz. Her şey yolundaysa OK deyip sayfadan çıkıyoruz.
Şimdi excel kaynağımızı çekelim. Tasarım ekranına Excel Source ekliyoruz ve çift tıklayarak dosyanın bulunduğu yolu ve verilerin bulunduğu excel sayfası seçimi yapıyoruz.
Aslında kullandığımız exceli ben oluşturdum. Çünkü biliyorsunuz iki farklı kaynaktaki verileri birleştireceğiz; join yapabilmemiz için iki tabloyu eşleştireceğimiz bir alana ihtiyacımız var. İki tabloda da bulunan ProductKey sütunu bu görevi görecek. Veri tabanındaki FactResellerSales tablosunu bazı sütunlarını eleyerek ve sorguyu bin satırlık çekerek excele aktardım. Yalnız bu bağlantıyı sağlayabilmeniz için Access Database Engine ihtiyacınız olacak. Buraya tıklayarak indirebilirsiniz. Hata almamak için kaç bit kullanacağınıza dikkat edin.
Artık iki ayrı kaynağa bağlanmış olduk. Bunları birleştirmek için Merge Join bileşenini kullanacağız. Fakat hata almamak için öncelikle iki kaynaktaki ProductKey ortak alanımızı eşitlik sağlamak açısından sıralamak zorundayız. İki adet Sort bileşeni ekliyoruz ve veri kaynaklarımızda bulunan okları Sort bileşeni ile birleştiriyoruz. Ben Şekil-3’de görüldüğü gibi desc (azalan) sıralama yaptım.
Şimdi son olarak hata almamak için bir değişiklik daha yapmamız gerekiyor. Excelden aldığımız veri için ProductKey alanının veri tipini SQL’den aldığımız verideki gibi integer a çevirerek aynı yapmalıyız. Bunun için Excel Source bileşenine sağ tıklayıp Show Advanced Editor diyoruz. Input and Output Properties sekmesinin Şekil-4’teki Output Columns bölümünden ProductKey sütununu seçiyoruz ve DataType kulakçığından DT_I4 seçimini yapıyoruz.
Artık Merge Join yapabiliriz. Bileşenimizi ekrana sürükleyip çift tıklıyoruz ve left join’i seçiyoruz çünkü satır sayılarımız farklı. Ardından istediğimiz sütunları yine seçebiliriz. Verileri yazdırmak için ben SQL’de bir tablo oluşturmayı seçiyorum. Bunun için OLE DB Destination alıyoruz. Veritabanını seçtiğimizde Şekil-5’teki gibi tablo yaratma scripti hazır geliyor. CREATE TABLE ifadesinden sonra oluşturacağımız tabloya isim veriyoruz. Mapping işleminden sonra OK deyip çıkabiliriz.
Oluşturduğumuz görevlerin tümü Şekil-6’daki gibi birbiriyle ilişkilendirilmiş olmalıdır. Başlat deyip görevleri çalıştırdıktan sonra ilgili veri tabanında kendi oluşturduğunuz tabloyu görebilirsiniz.
Böylece SSIS ile Merge Join kullanımını görmüş olduk. Bir sonraki yazımda Merge ve Merge Join görevlerinin farkından bahsedeceğim. Görüşmek üzere.
KAYNAKÇA