1. Ana Sayfa
  2. SQL Server
  3. Paralel Çalışan ETL (Extract, Transform and Load) Paketleri Nasıl Oluşturulur?

Paralel Çalışan ETL (Extract, Transform and Load) Paketleri Nasıl Oluşturulur?

Elimizde veri tabanı şemaları birbiriyle aynı olan ETL paketleri olabilir. Ya da aktarımı yapılacak olan şubelerden, bayilerden ya da farklı ülkelerden gelen datalar olabilir. Genellikle bu paketler içerisindeki datayı aktarmak için “For Loop Task” gibi bir yapı kullanılabilir. Ve genellikle bu gibi döngülerin olduğu ETL çözümlerinde zaman problemlerinden şikâyet edilir. Örnek olarak toplamda 8 saate tamamlanan bir paketimiz olduğunu düşünelim. Bu ETL paketi içerisindeki olası bir hata sonucu o gün için aktarımı gerçekleştirememiş olmamız kullanıcılara sunduğumuz raporların güncelliğini yitirmesine sebep olur. Bu tip bir paket içerisinde bir şubenin aktarımlarının yapılması için bir başka şubeyi beklemesine gerek yoksa her şubenin bir diğerinin tamamlanmasını beklemesi sürenin bu kadar uzamasının asıl sebebidir. Her şube için ayrı ayrı ETL çözümleri oluşturmadan, varolan paketi aynı anda bütün şubelerin kullanması mümkün olabilir mi? Eğer bu mümkün olursa paket süresi, aktarımı en uzun süren şubenin tamamlanması kadar sürecektir.

Öncelikle cevabı verelim; böyle bir şey mümkün. Aşağıda bunu nasıl yapabileceğinizin bir örneğini görebilirsiniz.

Senaryo şu şekilde; birbirleriyle aynı şemaya sahip ama birbirinden farklı sunucularda ve dolayısıyla farklı veri tabanlarında olan veriyi hedef sunucudaki veri tabanına taşımak istiyorsunuz. Öncelikle işlemi gerçekleştirmek için bir kaç tane kaynak veri tabanı, bir tane hedef veri tabanı ve bunların ortak kullanacağı bir ETL paketine ihtiyacımız var. Bu tek başına bir paket olabileceği gibi bir çok paketin olduğu kompleks bir projede olabilir. SSIS içerisinde yapmanız gereken; kaynak sunucular ve veri tabanları için Project Variable oluşturmuş olmanız gerekiyor.


Resim-1

Daha sonra kaynak veri tabanlarına bağlanmak için oluşturduğunuz connection manager’ ın property’ lerine girerek ServerName ve InitialCatalog değerlerini oluşturduğunuz proje parametreleri ile set etmeniz gerekiyor.


Resim-2

ETL paketinizi de tamamladıktan sonra artık deployment için uygun ortamı hazırlamanız gerekiyor. SQL Server 2012 ile birlikte gelen project deployment modeli kullanabilmek için öncelikle Integration Services Catalogs altında bir SSISDB oluşturmanız gerekli. Oluşturacağınız projeleri burada istediğiniz gibi alt klasörlere koyarak yönetebilir, yetkilendirmelerini yapabilir hatta deploy ettiğiniz paketlerin geçmiş versiyonlarına bile gidebilirsiniz. Bu adımdan sonra kaç farklı veri tabanına bağlanmanız gerekiyorsa o kadar environment variable oluşturmanız gerekiyor. Project variable olarak oluşturduğunuz değişkenleri environment variable ile eşledikten sonra işlem tamam!


Resim-3

Buraya kadar yapamadığımızı bilmediğimiz bir şey yoktu. Asıl cevabını aradığımız soru; farklı environment variable’ lar kullanarak aynı paketi eş zamanlı olarak çalıştırabiliyor muyuz? Bunun için schedule etmek üzere bir job oluşturuyoruz. Yalnız bu adımları yapmadan önce job’ ı oluşturduğumuz kullanıcının SQL Server Agent servisine yetkisi var mı kontrol etmeliyiz. Diyelim ki yok. Böyle bir durumda SSIS Package Execution Proxy oluşturmamız gerekiyor. Proxy üzerinden job’ ın owner’ ı olan kullanıcıya gerekli yetkiyi vermemiz lazım. Bu işlem için de öncelikle Credential oluşturmuş olmamız gerekli. Bu bize SQL Server’ dan güvenli bir şekilde dışarıya çıkış yetkisi verecektir. En basit haliyle windows’ da lokal (Domain kullanıcısıda olabilir) bir kullanıcı oluşturup bu kullanıcıya SQL Server Login’ leri üzerinden yetki vererek credential oluşturulabilir. Neden windows user oluşturuyoruz? Bildiğiniz gibi SQL Server’ da Logins SQL Server’ a güvenli bir şekilde bağlanmak için kullanılırlar. Dışarıya güvenli bir şekilde çıkmak için de Credentials kullanıyoruz. Credentials kullanarak SQL Server Agent dışındaki bir hesabın SQL job’ ı çalıştırmasını sağlayacağız. New Credentials diyerek daha önceden oluşturduğumuz lokal windows kullanıcısı için credential tanımlıyoruz.


Resim-4

Bu işlemin ardından oluşturduğumuz credential’ ı kullanacak Proxy’ yi oluşturuyoruz. SQL Server Agent altındaki Proxies kısmından ya da SSIS Package Execution üzerine gelerek New Proxy diyoruz ve oluşturduğumuz credential ile birlikte SSIS job’ ı çalıştıracak proxy tanımını yaratıyoruz.


Resim-5

Artık job oluşturmak ve bunu çalıştırmak için bir engel kalmadı. SQL Server Agent üzerinde sağ tıklayarak New->Job diyoruz ve karşımıza çıkan ekranın Owner kısmında Credential bilgilerini verdiğimiz Windows kullanıcısını yazıyoruz.


Resim-6

Daha sonra Steps sekmesinde New diyerek yeni bir job adımı oluşturuyoruz. Step Name alanını doldurduktan sonra Type kısmıda SQL Server Integration Services Package seçeneğini seçiyoruz. Run as kımında ise oluşturduğumuz Proxy’ yi seçmemiz gerekiyor. Package Source kısmında SSIS Catalog seçilmişken Server adını yazıp authentication bilgilerini yazıyoruz.


Resim-7

Oluşturacak olduğumuz job adımı için ilgili paketi seçip configuration kısmında kullanacak olduğumuz Environment ile paket içerisindeki değişkenleri eşliyoruz. Bu adımı, bu environment variable’ kullanarak çalıştır demiş oluyoruz. Tamam diyerek bu işlemi bitiriyoruz.


Resim-8

Son adım olarak Schedules sekmesine tıklıyoruz ve burada oluşturduğumuz adımı veya adımları schedule ederek işlemi tamamlıyoruz. (Schedule’ ı Enable etmeyi unutmayın!)


Resim-9

Job oluştururken izlediğimiz adımların aynısını diğer Enviroment’ lar içinde tamamladıktan sonra belirlediğimiz zaman geldiğinde hedef tabloya Select çekerek verilerin aktarıldığını görebilirsiniz. Böylece ETL paketlerimizi farklı ortamlar için birbirini bekleme zorunluluğu olmadan, eş zamanlı olarak çalıştırmış oluyoruz.

Paketlerin birbirlerinden bağımsız olarak paralel çalışmaları bu karakteristiğe sahip paketlerin çalışma sürelerini bir hayli azaltacaktır.

SSIS Project Parameters: http://technet.microsoft.com/en-us/library/hh213214.aspx

Environment Variables: http://stackoverflow.com/questions/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat
Create a SQL Server Agent Proxy: http://technet.microsoft.com/en-us/library/ms175834.aspx

Create a Credential: http://technet.microsoft.com/en-us/library/ms190703(v=sql.110).aspx

Schedule a Package by using SQL Server Agent: http://technet.microsoft.com/en-us/library/gg471507.aspx

Referanslar

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

www.mshowto.org

Yorum Yap

Yazar Hakkında

Özgür Erecekler, Bilgisayar Mühendisliği mezunu olup kariyerini veri üzerine çalışmalara adamıştır. Şu anda Bilge Adam Veri Yönetimi ve İş Zekası departmanında Kıdemli Danışman olarak çalışmalarına devam etmektedir.

Yorum Yap