DataTransform aracı; farklı türde veri tipleri ile çalışan, dağıtık ilişkisel veri tabanı verilerini ortak bir noktada kümeleşterip analiz, raporlama ve görselleştirme yapmak isteyen veya NoSQL sorgu yeteneklerini kullanabilen uygulamalar geliştiren kişi veya ekiplerin kolaylıkla kullanabileceği şekilde tasarlanmaış açık kaynak kodlu bir projedir.

SqlToMongo-1

Basit konfigürasyon seçenekleri ile farklı yerlerde hizmet veren kaynak SQL veri tabanlarından verilerinizi istediğiniz bir MongoDB veri tabanı sunucusuna kolaylıkla aktarabilen bu araç hakkında detayları ve kullanım şeklini anlatmaya çalışacağım.

Veri Tabanı Sunucuları

Bu kısımda test verilerimizin oluşturulması ve kaynak SQL Server sunucusunun ayaklandırılması için "Docker" kullanacağız. SQL Server 2017 Linux dağıtımını içeren "docker image" ı sayesinde geliştirme bilgisayarımızda "docker" ile çalışan bir SQL Server 2017 Linux örneği oluşturacağım. Bunun için aşağıdaki şekilde bir "Dockerfile" oluşturuyorum. Dockerfile istenilen "docker image" ın dosya da belirtilen komutları uygulayarak derlenip hazır hale getirilmesi için kullanılmaktadır.

FROM microsoft/mssql-server-linux:2017-latest

RUN mkdir -p /var/opt/mssql/backup

COPY MusicStore.bak /var/opt/mssql/backup

ENV MSSQL_SA_PASSWORD=P@ssword1

ENV ACCEPT_EULA=Y

Bu sıralı komut adımları detaylı olarak incelendiğinde; ilk olarak "mssql-server-linux:2017-latest" isminde bir "docker image" ın miras alınacağı belirtilmektedir. Sonraki adımlarda "backup" isminde bir klasör oluşturulup "MusicStore.bak" isimli dosyayı yerel bilgisayarımızdan derlenecek olan makinaya kopyalıyoruz. "ENV" komutu ile ortam değişkenleri için gerekli ayarları tamamlıyoruz.

Bu dosyanın bulunduğu dizinde iken aşağıdaki komutu çalıştırarak "localsql" isminde "mssql-server-linux:2017-latest image" ını kullanan - miras alan yeni bir "docker image" derliyoruz.

docker build -t localsql .

Derleme başarılı bir şekilde tamamlandığında "localsql" ismindeki örneği çalıştırabiliriz.

docker run -p 1401:1433 --name sql1 -d localsql

Bu komut ile çalıştırmayı gerçekleştirdiğimiz makinanın 1401 portuna gelen istekleri "localsql" makinasının 1433 portuna yönlendirme yapıp "docker image" ın SQL sunucusu olarak çalışmasını başlatıyoruz. Böylelikle aşağıdaki SQL Server bağlantı ifadesi ile çalışan "docker" SQL Server Linux 2017 sunucu örneğine bağlanabiliriz.

"Server=localhost,1401;Database=MusicStore;User ID=sa;Password=P@ssword1;MultipleActiveResultSets=true"

Kaynak veri tabanı sunucusu hazır hale getirildikten sonra aktarımın yapılacağı MongoDB sunucusunun yine "docker" kullanılarak çalışmasını sağlayabiliriz. Bunun için ek olarak verilerin MongoDB sunucusunda kalıcı hale getirilmesi için "docker volume" komutu ile disk alanı oluşturmamız gerek.

docker volume create --name=mongodata

Bu komut sayesinde aktarım sonucunda MongoDB tarafında oluşan veri tabanı ve koleksiyonlar, çalışan "mongo" örneği sonlandırılsa dahi tekrar çalıştırıldığında bu verilere ulaşabilecektir.


Aktarım Konfigürasyonu

Datatransform aracı ara yüzünü kullanarak aktarım için kullanacağınız konfigürasyon dosyalarını tanımlayabilirsiniz.

Örnek Konfigürasyon Dosyası

JSON formatı ile seçenekleri belirttiğimiz her dosya (musicstore.json):

{
  "TransformOptions": {
    "SqlConnectionString": "Server=localhost,1401;Database=MusicStore;User ID=sa;Password=P@ssword1;MultipleActiveResultSets=true",
    "MongoDbConnectionString": "mongodb://localhost:27017/MusicStore",
    "Maps": [
      {
        "TableName": "dbo.Albums",
        "IdentityColumnName": "AlbumId",
        "CollectionName": "Albums",
        "Fields": [ "AlbumId", "ArtistId", "AlbumArtUrl", "Created", "Price" ]
      },
      {
        "TableName": "dbo.Artists",
        "IdentityColumnName": "ArtistId",
        "CollectionName": "Artists",
        "Fields": []
      }
    ]
  }
}

öncelikli olarak kaynak ve hedef veri tabanı sunucularının bilgilerini ve bağlantı ifadelerini içermektedir. (SqlConnectionString, MongoDbConnectionString)

Maps

Dizi olarak tanımlanan "Maps" değeri, aktarım için kullanılacak kaynak tablo isim ve özelliklerinin yanı sıra hedef koleksiyon bilgilerini sağlamaktadır. "Fields" bilgisi aktarımda kullanılmak istenen kaynak veri tabanı tablo alanlarının belirtilmesi için kullanılmaktadır. Bu alan hiç değer girilmediği takdirde tüm alanları, eğer değer girilmiş ise sadece belirtilen alanları aktarıma dahil eder.

Konfigürasyon dosyalarını tanımladıktan sonra ara yüzden seçtiğiniz dosyaları çalıştır komutu ile başlatabilirsiniz.

ExecuteTask

Aktarım ile ilgili bilgileri "Log" bölümünden takip edebilirsiniz. Veri süreçlerimize katkı sağlaması dileğiyle.

Video: