Paralel Çalışan ETL Paketleri Oluşturma

Diyelim ki elimizde veri tabanı şemaları birbiriyle aynı olan ETL paketleri var. Mesela aktarımı yapılacak olan şubelerden, bayilerden ya da farklı ülkelerden gelen veriler var. Genellikle bu paketler içerisindeki veriyi aktarmak için For Loop Task gibi bir yapı kullanılır. Bu gibi döngülerin olduğu ETL çözümlerinde zaman problemlerinden şikayet edilir. Örnek olarak toplamda 8 saate tamamlanan bir paketimiz olduğunu varsayalım. Bu ETL paketi içersindeki 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.

Image

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.

Image

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!

ssiscat3

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.

Credentials

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.

Proxy

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.

Job1

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.

Job2

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.

Image

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!)

Image

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

Reklamlar
Bu yazı SSIS içinde yayınlandı ve , , , , , , , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

One Response to Paralel Çalışan ETL Paketleri Oluşturma

  1. Geri bildirim: Tek SSIS paketini farklı parametre değerleriyle paralel çalıştırmak | Veri Yönetimi Departmanından Haberler

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s