Sign In

 

 

NetCoreStack DataTransform: SQL'den MongoDB'ye Veri Aktarım AracıNetCoreStack DataTransform: SQL'den MongoDB'ye Veri Aktarım Aracı4562018-05-02T10:58:00Z 2.5.2018 10:58:00Gencebay Demir<div class="ExternalClassBEBC7B6E2C9E4CE88879E3657C61A86A"><p>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 tasarlanmış, açık kaynak kodlu bir projedir.</p><p>​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.</p><p> <strong>Veri Tabanı Sunucuları</strong></p><p>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.</p><pre class=" language-docker" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:16px;margin-top:0.5em;margin-bottom:0.5em;color:#000000;background:#f5f2f0;text-shadow:#ffffff 0px 1px;word-break:normal;word-wrap:normal;line-height:1.5;padding:1em;overflow:auto;max-width:100%;"> <code class=" language-docker" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:inherit;background:0px 0px;text-shadow:#ffffff 0px 1px;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;max-width:100%;">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</code></pre><p>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.</p><p>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.</p><pre class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:16px;margin-top:0.5em;margin-bottom:0.5em;color:#000000;background:#f5f2f0;text-shadow:#ffffff 0px 1px;word-break:normal;word-wrap:normal;line-height:1.5;padding:1em;overflow:auto;max-width:100%;"> <code class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:inherit;background:0px 0px;text-shadow:#ffffff 0px 1px;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;max-width:100%;">docker build -t localsql .</code></pre><p>Derleme başarılı bir şekilde tamamlandığında "localsql" ismindeki örneği çalıştırabiliriz.</p><pre class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:16px;margin-top:0.5em;margin-bottom:0.5em;color:#000000;background:#f5f2f0;text-shadow:#ffffff 0px 1px;word-break:normal;word-wrap:normal;line-height:1.5;padding:1em;overflow:auto;max-width:100%;"> <code class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:inherit;background:0px 0px;text-shadow:#ffffff 0px 1px;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;max-width:100%;">docker run -p 1401:1433 --name sql1 -d localsql</code></pre><p>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.</p><pre class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:16px;margin-top:0.5em;margin-bottom:0.5em;color:#000000;background:#f5f2f0;text-shadow:#ffffff 0px 1px;word-break:normal;word-wrap:normal;line-height:1.5;padding:1em;overflow:auto;max-width:100%;"> <code class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:inherit;background:0px 0px;text-shadow:#ffffff 0px 1px;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;max-width:100%;">"Server=localhost,1401;Database=MusicStore;User <a class="token email-link" href="mailto:ID=sa;Password=P@ssword" style="text-rendering:optimizelegibility;box-sizing:border-box;background:0px 0px;color:#333333;transition:color 0.3s;">ID=sa;Password=P@ssword</a>1;MultipleActiveResultSets=true"</code></pre><p>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 <a href="https://docs.docker.com/storage/volumes/" target="_blank">"<span class="ms-rteForeColor-8" style="text-decoration:underline;">docker volume</span>"</a> komutu ile disk alanı oluşturmamız gerek.</p><pre class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:16px;margin-top:0.5em;margin-bottom:0.5em;color:#000000;background:#f5f2f0;text-shadow:#ffffff 0px 1px;word-break:normal;word-wrap:normal;line-height:1.5;padding:1em;overflow:auto;max-width:100%;"> <code class=" language-markup" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:inherit;background:0px 0px;text-shadow:#ffffff 0px 1px;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;max-width:100%;">docker volume create --name=mongodata</code></pre><p>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.</p><p> <strong>Aktarım Konfigürasyonu</strong></p><p>Datatransform aracı ara yüzünü kullanarak aktarım için kullanacağınız konfigürasyon dosyalarını tanımlayabilirsiniz.</p><p> <strong>Örnek Konfigürasyon Dosyası</strong></p><br> ​JSON formatı ile seçenekleri belirttiğimiz her dosya (musicstore.json):<p></p><pre class=" language-javascript" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:16px;margin-top:0.5em;margin-bottom:0.5em;color:#000000;background:#f5f2f0;text-shadow:#ffffff 0px 1px;word-break:normal;word-wrap:normal;line-height:1.5;padding:1em;overflow:auto;max-width:100%;"><code class=" language-javascript" style="text-rendering:optimizelegibility;box-sizing:border-box;font-family:consolas, monaco, "andale mono", "ubuntu mono", monospace;font-size:inherit;background:0px 0px;text-shadow:#ffffff 0px 1px;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;max-width:100%;"><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">{</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"TransformOptions"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">{</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"SqlConnectionString"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Server=localhost,1401;Database=MusicStore;User <a class="token email-link" href="mailto:ID=sa;Password=P@ssword" style="text-rendering:optimizelegibility;box-sizing:border-box;background:0px 0px;color:inherit;transition:color 0.3s;">ID=sa;Password=P@ssword</a>1;MultipleActiveResultSets=true"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"MongoDbConnectionString"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"<a class="token url-link" style="text-rendering:optimizelegibility;box-sizing:border-box;background:0px 0px;color:inherit;transition:color 0.3s;">mongodb://localhost:27017/MusicStore</a>"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Maps"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">[</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">{</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"TableName"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"dbo.Albums"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"IdentityColumnName"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"AlbumId"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"CollectionName"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Albums"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Fields"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">[</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"AlbumId"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"ArtistId"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"AlbumArtUrl"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Created"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Price"</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">]</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">}</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">{</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"TableName"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"dbo.Artists"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"IdentityColumnName"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"ArtistId"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"CollectionName"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Artists"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">,</span> <span class="token string" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#669900;">"Fields"</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">:</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">[</span><span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">]</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">}</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">]</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">}</span> <span class="token punctuation" style="text-rendering:optimizelegibility;box-sizing:border-box;color:#999999;">}</span></code></pre><p>Öncelikli olarak kaynak ve hedef veri tabanı sunucularının bilgilerini ve bağlantı ifadelerini içermektedir. (SqlConnectionString, MongoDbConnectionString)</p><p><strong>Maps</strong></p><p>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.</p><p>Konfigürasyon dosyalarını tanımladıktan sonra ara yüzden seçtiğiniz dosyaları çalıştır komutu ile başlatabilirsiniz.​</p><p><img src="/blog/PublishingImages/Lists/Posts/AllPosts/ExecuteTask.JPG" alt="ExecuteTask.JPG" style="margin:5px;width:575px;height:403px;" /><br></p><p>Aktarım ile ilgili bilgileri "Log" bölümünden takip edebilirsiniz. Veri süreçlerimize katkı sağlaması dileğiyle…</p><div class="ms-rtestate-read ms-rte-embedcode ms-rte-embedil ms-rtestate-notify"><iframe width="560" height="315" src="https://www.youtube.com/embed/4Vah4gRteaI?rel=0" frameborder="0"></iframe> </div><p><br></p></div>netcorestack-datatransform-sqlden-mongodbye-veri-aktarim-aracihttp://www.bilgeadam.com/blog/Lists/Photos/PostImages/sql-to-mongo.pngDataTransform 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 tasarlanmış, açık kaynak kodlu bir projedir.bluePROYazılım

Yazara Soru Sor




SORU GÖNDER