Azure Data Factory Nedir?
Merhabalar bu yazımda sizlere elimden geldiğince Azure Data Factory(ADF) hakkında bilgi vermeye ve kullanım örnekleri göstermeye çalışacağım.Bildiğiniz üzere gün geçtikçe şirketlerin veri boyutu büyümekte ve “Big Data” alanında yapılan çalışma ve kullanılan teknolojilerin sayısı artmaktadır.Şirketler bu verilerini on-premise tarafında yönetmeye çalışırken beklenmedik maliyetlere,eforlara,zaman kaybına vb. durumlara katlanmakta.Bunu belli bir ölçüde on-premise tarafında yapan şirketler ise bu teknolojileri belli bir merkezilik ve organize edilebilirlik sağlamakta birçok sebepten dolayı zorluk çekmektedir.Bu olumsuzlukları iyi analiz eden Bulut Teknolojileri sağlayıcıları ise şirketlere bu konuda esneklik ve zaman kazandıracak birçok servis üretmektedir.Benim bu yazımda anlatacağım alan herhangi bir kaynakta saklanan verinin buluta taşınmasında kolaylık sağlayan ve şirketlerin karmaşık veri entegrasyonu süreçlerini esnek ve ölçeklenebilir bir şekilde gerçekleştirebileceği bir servis olan Azure Data Factory’i ele almak olacak.
Bulut ortamında bu servisten yararlanmak istediğinizde Azure Data Factory iki farklı sürüm ile karşınıza çıkacaktır.Bunlar v1 ve v2'dir.v2 v1'e göre daha işlevseldir.Bulut ortamındaki veritabanı sunucunuzda Integration Services Catalog oluşturulabilir bunu Azure Data Factory kısmında SSIS IR(Integartion Runtime) oluştururak ETL paketlerinizi bulut ortamında çalıştırabilirsiniz.v1 sürümü ile oluşturacağınız ADF üzerinde bu işlemi gerçekleştiremezsiniz.Benim tavsiyem v2 sürümüne sahip bir ADF oluşturmanız olacaktır.Gelin isterseniz bu servisi yakından inceleyelim.https://portal.azure.com/ giderek eğer bir Azure hesabınız yoksa oluşturup 1 ay boyunca size tanımlanan kredi ile Azure servislerini deneyimleyebilirsiniz.(Not:Banka Kartı veya Kredi Kartı bilgisine ihtiyacınız olacak ama eğer öğrenciyseniz https://azure.microsoft.com/en-in/free/students/ adresindende kart bilgisi girmedende üyelik başlatabilirsiniz.)
Home sekmesinde Azure services kısmında ben bu servisi daha önce oluşturup kullandığım için hemen ulaştım ama siz ilk defa oluşturacaksanız büyük ihtimal bu kısımda göremeyeceksiniz.”More services” kısmına tıklayarak ya da “Search” kısmına ulaşmak istediğiniz servisin adını yazarsanız ulaşabilirsiniz.Bu servisin oluşturulması konusuna yazımda daha detaylı örnekler göstermek için değinmeyeceğim.
Oluşturmuş olduğunuz ADF kaynağına Home kısmındaki “Recent resources ” kısmından ulaşabilir yada hangi Resource Group(RG) altında oluşturduysanız o kaynağa da gidip oradan da ulaşabilirsiniz.
Görmüş olduğunuz gibi Resource Group Azure’da yararlanmış olduğunuz servisleri yönetmekte size bir merkezilik kazandırır.
ADF kaynağına geldiğimizde işlemi gerçekleştireceğimiz arayüze gitmek için “Author & Monitor” kısmına tıklıyoruz.
Hızlı bir başlangıç yapmak ve ortamı deneyimlemek için Azure sizlere Let’s get started başlığı altında bir sürü seçenek sunmakta.Gelin isterseniz ilk pipeline oluşturma işlemimizi gerçekleştirelim.Bunun için “Create pipeline” seçeneğine tıklamak yerine sol kenarda bulunan kalem işaretine yani “Author” kısmına tıklıyorum.
Gelen çalışma ekranında Pipelines kısmına gelince “…” çıkacak o işareti görüp sağ tık yaptığınızda “New pipeline” diyerek yeni bir pipeline oluşturabiliriz.
Properties sekmesinde Name kısmına gerçekleşen işlemin genel ifadesini tanımlamanız daha sonra artacak olan pipeline durumunda işleyiş ile ilgili size ipucu vermesi için önem teşkil etmektedir.Sol taraftaki Activities sekmesine baktığımızda verinin kaynaktan gelip raporlama,analiz ve makine öğrenimine kadarki tüm süreçlerle ilgili işlem yapabileceğiniz araçlar mevcut.Şimdi Azure üzerinde oluşturduğumuz Storage kaynağından csv uzantılı dosyayı Azure üzerinde oluşturduğumuz Azure SQL database sunucusuna aktaralım.Bunun için ilk önce Storage kaynağımıza gidip bir container oluşturalım ve içerisine lokalimizde bulunan birkaç csv dosyasını içeri aktarılım.
Storage kaynağınıza geldiğinizde sekmelerde bulunan “Containers” kısmına gelerek “+Container” diyerek oluşturma işlemini gerçekleştirebilirsiniz.
Public access level’da erişim kısıtlamanızı gerçekleştirebilirsiniz.Ben default olarak Private seçeneğinde bıraktım siz Container veya Blob seçeneklerini seçerek public olarak da erişime açabilirsiniz.
Başarılı bir şekilde Container oluşturduk.Şimdi içerisine girerek lokalimizdeki csv uzantılı dosyalarımızı içeri aktarabiliriz.
Yukarıdaki adımları uygularak lokalinizde içeri aktarmak istediğiniz dosyaları seçebilirsiniz.
Başarılı bir şekilde lokalimdeki dosyaları Azure’daki Storage kaynağıma aktardım.Tekrardan Pipeline kısmına dönebiliriz.Veriyi bir kaynaktan alıp başka bir kaynağa taşıyacağımız için “Move & Transform” sekmesindeki Copy Data Task’ini pipeline sürükleyeceğiz.
İlgili task pipeline üzerinde getirildiğinde kırmızı çerçevede de görüldüğü üzere Source ve Sink sekmeleri bizden bilgi talep etmektedir.
Source dataset kısmında daha önce tanımlamış olduğunuz kaynakları görebilirsiniz.Biz yeni bir kaynak oluşturacağımız için “+New” kısmına tıklıyoruz.
Burada kaynak veriyi nereden alacaksak onu belirtiyoruz.Görmüş olduğunuz gibi birçok kaynak mevcut ve gün geçtikçe bu liste artmakta.Biz Azure üzerindeki Storage hesabımızdan alacağımız için “Azure Blob Storage” kaynağını seçiyoruz.
Bundan sonraki sekmede bize içeriden alacağımız dosya formatını sormakta ben csv uzantılı bir dosya yüklediğim için ve onu kullanacağım için “DelimitedText” kısmını seçiyorum.
“Name” kısmına içeriden alacağımız veri setinin ismini yazdım.Kaynağı belirtik veriyi Azure Blob Storage’dan alacağımızı csv formatında alacağımızı söyledik.Şimdi ise bu kaynakla bir bağlantı kurmamız lazım.Bunun için Linked Service kısmına gelip daha önceden oluşturmuş olduklarımızı görebiliriz ama biz yeni bir Linked Service oluşturacağız bu yüzden “+New” kısmına tıklıyoruz.
Bu kısımda önemli olan alanlar Azure subscription burada birden fazla üyelik seçeneğiniz bulunabilir.Kullanmak istediğiniz Azure Blob Storage kaynağı hangi üyelik bilginiz altında tanımlı ise o üyelik bilgisini seçebilirsiniz.”Storage account name” kısmında ise oluşturmuş olduğumuz container’ı seçiyoruz.
Oluşturmuş olduğumuz Linked Service seçeneğini ilgili sekmede görmekteyiz.Şimdi ise File path kısmındaki Folder simgesine tıklayarak içeriden alacağımız dosyayı seçelim.First row as header kısmı önemli çünkü ilk satır eğer sizin kolon isimlerinizi temsil ediyorsa bu işareti seçmelisiniz.
Source olarak Storage kaynağımızdan aldığımız csv uzantılı dosya başarılı şekilde Datasets sekmesine gelmiş.Sıra geldi hedef kaynağımızı belirtmekte.
Source kısmındaki 1 işareti kalktı görmüş olduğuz gibi şimdi Sink sekmesi yani hedef kaynağımızı belirteceğiz.Yeni bir hedef kaynak belirteceğimiz için yine “+Create” kısmına tıklayabiliriz.
Hedef kaynak olarak Azure SQL Database servisini kullanarak oluşturmuş olduğumuz kaynağımızı seçeceğiz.
Yine hedef kaynağımızı seçtik ama hedef kaynak ile iletişime geçmek için Linked Service oluşturmamız gerekmekte bunun için yine “+New” diyerek iletişim için gerekli şartları oluşturacağız.
Bağlantı sağlayacağınız sunucu için gerekli subscription türünü ilgili sunucuyu,database,kullanıcı ve şifre bilgilerini girdikten sonra “Test Connection ” diyerek başarılı bir şekilde gerçekleşip gerçekleşmediğini kontrol edebilirsiniz.
Son olarak da ilgili database de hangi tabloya aktarılacağını belirtiyoruz.
Mapping sekmesinde Source ve Destination kısmındaki kolon eşleşmelerini kontrol ediyoruz ve herhangi bir yanlışlık varsa burada düzeltebiliyoruz.Source kısmındaki veri tiplerinin hepsi String olarak gözüksede ekran görüntüsünde çıkmamış ama Destination kısmınında da type kısmı mevcut.Math score,reading score ve writing score için veri tipleri destination kısmında int durumda.Bu kısmıda kontrol etmenizde fayda var.
Mapping sekmesindeki işlemlerimizide başarılı şekilde tamamlıyoruz.Son olarak Sink sekmesindeki “Pre-copy script” kısmına bu task her çalışmadan önce ilgili tablodaki verilerin temizlenmesi için aşağıdaki kodu yazıyorum.
Basit bir pipeline oluşturduk.Gelin şimdi debug edelim.Debug işlemini aşağıdaki şekilde “Debug” kısmına tıklayarak başlatabiliriz.
Debug işlemi bittikten sonra görüyoruz ki ilgili işlem başarılı şekilde gerçekleşmiş ama bunu kontrol etmemiz lazım.Lokalimizdeki SSMS aracını kullanarak Azure üzerindeki sunucumuza bağlanıp ilgili veritabanındaki tabloyu sorgulayalım.
Bağlantı kurduktan sonra ilgiyi tabloyu sorguladığımızda ilgili veri akışının gerçekleştiğini görmekteyiz.
Yapılan işlemlerin kaydedilmesi için yani daha sonradan pipeline oluşturmak için geldiğinizde önceki yaptığınız işlemleri görmek istiyorsanız bu değişikleri Publish etmeniz gereklidir.Bunu da yukarıdaki sekmede bulunan “Publish all” kısmına tıklayarak beklemede tüm işlemleri publish edebilirsiniz.Son olarak bu pipeline düzenli olarak belirlenen zaman aralığında çalışması gerekiyorsa “Add trigger” seçeneğine tıklayarak istenilen zamana ayarlayıp çalışmasını sağlayabiliriz.
Sizde uygun bilgileri girerek ilgili pipeline’nın düzenli şekilde çalışmasını sağlayabilirsiniz.Bu işlemi yaptıktan sonra yine publish etmeyi unutmayın tabi.Oluşturmuş olduğunuz trigger’ın düzenli çalışıp çalışmadığını hangi aralıklarla fail ettiğini görmek için Monitor seçeneğine gitmeniz gereklidir.
Görmüş olduğunuz gibi ilgili pipeline için ne zaman başladı ,ne zaman bitti hangi trigger çalıştırdı,nasıl bitti vb. tüm sorulara bu kısımdan ulaşabilirsiniz.