SSIS’de Union All
Herkese merhaba. Bu yazımda SSIS’de Union All görevini kullanmayı göreceğiz. Daha önce farklı iki veri kaynağını Merge göreviyle tek bir çıktıya dönüştürmüştük ve SQL Union kullanımına benzediğinden bahsetmiştik. Şimdi de SSIS’de neden Union All var ve nasıl kullanılır konularına da değinmiş olalım.
Union All iki veya ikiden fazla veri kaynağını birleştirmek istediğimizde kullanacağımız bir task. Yine satır bazlı bir birleştirme yapmış olacağız, fakat bildiğiniz üzere Merge kullanarak ikiden fazla kaynakta bunu gerçekleştiremiyorduk. Kullanacağımız veri kaynakları yine aynı da olabilir farklı da olabilir. Kaynak yapısından bağımsız olarak hedefimize ulaşabiliriz. Ayrıca Merge kullanmak için verilerimizi sıralamak zorundaydık. Union All kullanırken bunu yapmak zorunda değiliz. Eğer verilerimiz sıralı değilse veya çıktımızdaki verilerin sıralı olması bizim için gerekli değilse Union All kullanmamız çok daha pratik olacaktır.
Kullanacağımız veri kaynaklarından birinde kolon sayısı eksik ise veya ismi farklıysa; elde edeceğimiz çıktıda bu satırlara ait değerler NULL olarak gözükecektir. Eğer verilerde bir eksiklik var ise ilgili kolon başlığı o satırda boş gözükecektir. Bu ayrıntıları gözlemlemek adına uygun bir örnek ile SSIS’de Union All görevini birlikte çalıştıralım.
Örneğimiz için üç farklı txt dosyası hazırladım. Bu dosyalarda çeşitli şirket isimleri ve çalışanlara ait isim, soyisim, şehir ve cinsiyet bilgileri bulunmakta. Her birinde bazı veriler eksik ayrıca üç numaralı dosyadan “Gender” kolonunu çıkardım. Aşağıdaki resimde bunu gözlemleyebilir, siz de kendinize benzerini oluşturabilirsiniz:
Bu txt biçimindeki kaynakları kullanabilmek için SSIS tasarım ekranımızda “Flat File Source” kullanacağız. Her bir veri kaynağımız için Data Flow Task bileşeni içerisine Flat File Source alalım ve dosya yollarını seçelim. Daha sonra hiçbir sıralama yapmadan Union All görevini alalım ve çalıştırmadan önce yine Multicast kullanalım. İsterseniz bir destination kaynağı seçip çıktıyı orada da görüntüleyebilirsiniz. Oluşturduğumuz görev akışı aşağıdaki gibi olmalıdır:
Paketimizi çalıştırdığımızda ise çıktımız aşağıdaki gibi ekrana gelecektir. Görüldüğü üzere eksik verilerimiz ilgili satırlarda boş olarak geldi. Üç numaralı veri kaynağımızda “Gender” kolonu olmadığı için Todd, Raja ve Sean isimli çalışanların cinsiyet bilgileri NULL olarak geldi.
Ayrıca dikkat ederseniz bazı çalışanlar iki kaynakta da yer aldığı için çıktı tablomuzda da çift kayıt oluşturdu. Bunu engellemek yani SQL deki Union mantığı ile çalıştırmak için sort bileşenini kullanmamız gerekiyor. Büyükten küçüğe veya küçükten büyüğe sıralama yaptıktan sonra aynı satırları getirmemesini söylememiz gerekiyor. Bunun için standart editör ekranında Şekil-4 te gözüken onay kutucuğunu işaretlemeliyiz veya Sort görevi üzerinde sağ tıklayıp “Show Advanced Editor” dediğimizde açılan gelişmiş editör ekranında EliminateDuplicates seçeneğini True yapmalıyız.
Son durumdaki akışımız aşağıdaki gibi olmalıdır. Bu akış ile paketimizi çalıştırdığımızda artık her bir kayıttan tek satır görmüş oluyoruz.
Böylece SSIS’de Union All kullanarak hedeflerimize uygun çıktı üretmiş olduk. Bir sonraki yazımda diğer görev kullanımlarıyla devam edeceğiz. Serinin sonraki bölümlerinde görüşmek üzere.
Kaynakça
https://tr.linkedin.com/in/seyma-tasci-31316baa?trk=profile-badge