{"id":10832,"date":"2021-03-02T00:27:36","date_gmt":"2021-03-02T08:27:36","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=10832"},"modified":"2025-06-13T16:46:30","modified_gmt":"2025-06-13T23:46:30","slug":"sql-to-nosql-automated-migration","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/sql-to-nosql-automated-migration\/","title":{"rendered":"SQL para NoSQL: Migra\u00e7\u00e3o automatizada"},"content":{"rendered":"<div class=\"paragraph\">\n<p>A migra\u00e7\u00e3o de SQL para NoSQL parece uma contradi\u00e7\u00e3o, mas gra\u00e7as aos avan\u00e7os e inova\u00e7\u00f5es no banco de dados NoSQL do Couchbase Server, ela est\u00e1 se tornando mais f\u00e1cil.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Nesta postagem, apresentarei a voc\u00ea uma ferramenta chamada <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\">SqlServerToCouchbase<\/a>uma tentativa de c\u00f3digo aberto de uma ferramenta automatizada para ajud\u00e1-lo a \"converter\" um banco de dados do Microsoft SQL Server em um banco de dados do Couchbase Server. Ao longo do caminho, examinaremos as estrat\u00e9gias de migra\u00e7\u00e3o de dados, as compara\u00e7\u00f5es entre os termos SQL e NoSQL e as compensa\u00e7\u00f5es entre os dois tipos de bancos de dados. <strong>Mesmo que voc\u00ea n\u00e3o esteja usando o SQL Server ou o Couchbase Server<\/strong>Este artigo pode ajud\u00e1-lo em seus esfor\u00e7os de convers\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de come\u00e7ar, lembre-se de que a mudan\u00e7a entre dois bancos de dados (SQL para NoSQL <em>ou<\/em> SQL para SQL) \u00e9 muito parecido com a tradu\u00e7\u00e3o entre dois idiomas. Existem automa\u00e7\u00f5es como Babelfish, Google Translate e assim por diante. Essas ferramentas s\u00e3o muito \u00fateis para come\u00e7ar, mas n\u00e3o substituem (eventualmente) a imers\u00e3o no idioma.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<blockquote class=\"twitter-tweet\" data-width=\"550\" data-dnt=\"true\">\n<p lang=\"qme\" dir=\"ltr\"><a href=\"https:\/\/twitter.com\/hashtag\/googletranslatefails?src=hash&amp;ref_src=twsrc%5Etfw\">#googletranslatefails<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/overs%C3%A6ttelsesfejl?src=hash&amp;ref_src=twsrc%5Etfw\">#overs\u00e6ttelsesfejl<\/a> <a href=\"https:\/\/t.co\/SNNoGHBD1Q\">pic.twitter.com\/SNNoGHBD1Q<\/a><\/p>\n<p>- EgoLibris (@egolibris) <a href=\"https:\/\/twitter.com\/egolibris\/status\/864846974859849728?ref_src=twsrc%5Etfw\">17 de maio de 2017<\/a><\/p><\/blockquote>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Al\u00e9m da tradu\u00e7\u00e3o da sintaxe, h\u00e1 tamb\u00e9m as express\u00f5es idiom\u00e1ticas e a cultura que envolve qualquer tecnologia. Nenhuma ferramenta de automa\u00e7\u00e3o pode capturar todas as nuances, mas vamos tentar para ver at\u00e9 onde podemos chegar.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_strategies_to_migrate_data_from_sql_to_nosql\">Converter SQL em NoSQL: Estrat\u00e9gias de migra\u00e7\u00e3o de dados<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Se estiver pensando em migrar dados do SQL Server para o Couchbase (ou de qualquer banco de dados relacional para o Couchbase), a primeira etapa \u00e9 chegar a um acordo sobre seus objetivos e planos de alto n\u00edvel. H\u00e1 v\u00e1rios caminhos a serem seguidos, e cada um deles oferece riscos, esfor\u00e7os e benef\u00edcios. Aqui est\u00e3o alguns exemplos de como converter SQL em NoSQL:<\/p>\n<\/div>\n<div class=\"responsive-table\">\n<table class=\"tableblock frame-all grid-all spread\">\n<colgroup>\n<col style=\"width: 10%\" \/>\n<col style=\"width: 60%\" \/>\n<col style=\"width: 10%\" \/>\n<col style=\"width: 10%\" \/>\n<col style=\"width: 10%\" \/> <\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">N\u00edvel<\/th>\n<th class=\"tableblock halign-left valign-top\">Descri\u00e7\u00e3o<\/th>\n<th class=\"tableblock halign-left valign-top\">Risco<\/th>\n<th class=\"tableblock halign-left valign-top\">Esfor\u00e7o<\/th>\n<th class=\"tableblock halign-left valign-top\">Benef\u00edcios<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Reescrita<\/strong>: Sem migra\u00e7\u00e3o, escreva tudo de novo<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">5\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">5\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u2b50\u2b50\u2b50\u2b50\u2b50<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Redesenho do esquema<\/strong>: Mantenha sua l\u00f3gica de neg\u00f3cios, reescreva sua camada de dados e esquema, redesenhe totalmente seu esquema com um modelo otimizado para NoSQL<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u2b50\u2b50\u2b50\u2b50<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">3<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Refatorar primeiro<\/strong>: Mantenha tudo, mas refatore sua l\u00f3gica de dados e o esquema RDBMS em um modelo otimizado para NoSQL<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">3\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u2b50\u2b50\u2b50<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Otimizar depois<\/strong>: Hospedar seu esquema com o m\u00ednimo de altera\u00e7\u00f5es poss\u00edvel, fazer com que o aplicativo seja executado na nova tecnologia, refatorar\/otimizar o esquema conforme necess\u00e1rio para o desempenho<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">3\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u2b50\u2b50\u2b50<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Apenas hospede-o<\/strong>: Hospede seu esquema com o m\u00ednimo de altera\u00e7\u00f5es poss\u00edvel.<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2\/5<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u2b50\u2b50<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>Historicamente, os bancos de dados NoSQL t\u00eam se concentrado na reconstru\u00e7\u00e3o de \"N\u00edvel 1\" ou em projetos greenfield. Embora essa abordagem obtenha o m\u00e1ximo de benef\u00edcios do NoSQL desde o in\u00edcio, as reconstru\u00e7\u00f5es s\u00e3o sempre caras e arriscadas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>No entanto, o Couchbase Server, juntamente com os novos recursos que vir\u00e3o no Couchbase Server 7 (voc\u00ea pode baixar o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">Couchbase 7 beta neste momento<\/a>), permite uma abordagem de n\u00edvel 5 (seguida de n\u00edvel 4) que reduz o risco e o custo de experimentar o NoSQL. Voc\u00ea n\u00e3o necessariamente colher\u00e1 <strong>todos<\/strong> os benef\u00edcios do NoSQL imediatamente, mas come\u00e7ar a us\u00e1-lo est\u00e1 mais f\u00e1cil do que nunca.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_convert_from_sql_to_nosql\">Converter consulta SQL em NoSQL<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>A maioria dos desenvolvedores e usu\u00e1rios de bancos de dados est\u00e1 familiarizada com os bancos de dados relacionais. Esquemas, tabelas, linhas e colunas, consultas SQL, transa\u00e7\u00f5es ACID. A linguagem de consulta do Couchbase (N1QL) reconhece h\u00e1 muito tempo que o SQL \u00e9 o <em>l\u00edngua franca<\/em> de bancos de dados. Atualmente, o N1QL oferece recursos completos de SQL, incluindo JOINs, indexa\u00e7\u00e3o robusta, agrega\u00e7\u00e3o, CTEs e muito mais. Isso faz com que seja relativamente simples para os desenvolvedores de SQL serem produtivos, mesmo como novatos na oferta de NoSQL do Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Dica<\/strong>: Fazer check-out <a href=\"https:\/\/www.techvalidate.com\/product-research\/couchbase\/charts\/2A1-8B3-4BC\">Por que os desenvolvedores valorizam o Couchbase<\/a> e outras pesquisas independentes da TechValidate.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>E se a maioria dos outros conceitos relacionais pudesse ser traduzida e convertida com a mesma facilidade? Vamos ver como os conceitos do SQL Server podem ser mapeados para os conceitos do Couchbase Server.<\/p>\n<\/div>\n<div class=\"responsive-table\">\n<table class=\"tableblock frame-all grid-all spread\">\n<colgroup>\n<col style=\"width: 33.3333%\" \/>\n<col style=\"width: 33.3333%\" \/>\n<col style=\"width: 33.3334%\" \/> <\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">SQL Server<\/th>\n<th class=\"tableblock halign-left valign-top\">Servidor Couchbase<\/th>\n<th class=\"tableblock halign-left valign-top\">Notas<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Servidor<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Aglomerado<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Um dos principais benef\u00edcios do NoSQL \u00e9 a escalabilidade e a alta disponibilidade que o clustering proporciona.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cat\u00e1logo\/Banco de dados<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Balde<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Os buckets do Couchbase tamb\u00e9m oferecem um cache integrado para melhorar o desempenho<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Esquema<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Escopo<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">O esquema geralmente \u00e9 apenas \"dbo\" no SQL Server, mas nem sempre.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Tabela<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cole\u00e7\u00e3o<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">As cole\u00e7\u00f5es s\u00e3o mais flex\u00edveis: n\u00e3o h\u00e1 colunas ou restri\u00e7\u00f5es predefinidas<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Linha<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Documento<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JSON em vez de dados simples<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">tSQL<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">N1QL<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">O N1QL n\u00e3o \u00e9 \"semelhante ao SQL\", \u00e9 uma implementa\u00e7\u00e3o completa do SQL com extens\u00f5es JSON, \u00e0s vezes chamada de SQL++<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Chave prim\u00e1ria<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Chave do documento<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">As chaves prim\u00e1rias devem ser exclusivas por tabela, as chaves de documento devem ser exclusivas por cole\u00e7\u00e3o<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u00cdndice<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u00cdndice<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">SQL: \u00cdndices em coluna(s), Couchbase: \u00cdndices em campo(s) JSON<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>Com esse mapeamento como linha de base, podemos escrever um programa para converter automaticamente o conte\u00fado de um banco de dados do SQL Server em um banco de dados do Couchbase Server?<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Acredito que podemos chegar \u00e0 maior parte do caminho, e criei um projeto de c\u00f3digo aberto chamado <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\">SqlServerToCouchbase<\/a> para fazer exatamente isso.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_database_catalog_to_bucket\">Converter banco de dados SQL em NoSQL\/Cat\u00e1logo em Bucket<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Vou usar o <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/samples\/adventureworks-install-configure#download-backup-files\">AdventureWorks<\/a> fornecidos pela Microsoft no SQL Server. Estarei migrando para um banco de dados Couchbase 7 (<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">atualmente em vers\u00e3o beta<\/a>mas provavelmente ser\u00e1 RTM este ano).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Observa\u00e7\u00e3o<\/strong>: Estou usando o AdventureWorks2016 porque \u00e9 a vers\u00e3o do SQL Server que tenho dispon\u00edvel. A maioria das vers\u00f5es mais antigas e mais recentes deve funcionar bem, mas se voc\u00ea tiver algum problema, <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\">crie um problema no GitHub<\/a>!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13002-sql-server-adventureworks.png\" alt=\"SQL Server with AdventureWorks\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea pode criar um bucket manualmente no Couchbase Server ou pode fazer com que o utilit\u00e1rio crie o bucket automaticamente para voc\u00ea.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13003-couchbase-adventureworks.png\" alt=\"AdventureWorks bucket in Couchbase\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_schema_to_scope\">Esquema para escopo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>No SQL Server, um <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/framework\/data\/adonet\/sql\/ownership-and-user-schema-separation-in-sql-server\">esquema<\/a> \u00e9 como um \"namespace\" que permite agrupar objetos (como tabelas) para fins de organiza\u00e7\u00e3o\/seguran\u00e7a. Por exemplo, o AdventureWorks cont\u00e9m esquemas como HumanResources, Person, Production etc.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Muitos projetos n\u00e3o usam realmente o esquema al\u00e9m do esquema padr\u00e3o \"dbo\". No entanto, um esquema pode ser usado para agrupar dados de um microsservi\u00e7o espec\u00edfico ou de um locat\u00e1rio espec\u00edfico em um aplicativo multilocat\u00e1rio.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13004-sql-server-schemas.png\" alt=\"SQL Server schemas\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>No Couchbase 7, h\u00e1 um conceito muito semelhante chamado <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/learn\/data\/scopes-and-collections.html\">\"escopo\"<\/a>. Ele oferece os mesmos benef\u00edcios de organiza\u00e7\u00e3o e seguran\u00e7a para microsservi\u00e7os ou multitenancy.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13005-couchbase-scopes.png\" alt=\"Couchbase scopes\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Com base em suas prefer\u00eancias, o utilit\u00e1rio SqlServerToCouchbase pode criar escopos com base nos esquemas do SQL Server ou pode ignor\u00e1-los e colocar tudo em um esquema chamado \"_default\" (que \u00e9 aproximadamente equivalente a \"dbo\"). No exemplo acima, optei por criar escopos para cada esquema do AdventureWorks.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_table_to_collection\">Da mesa \u00e0 cole\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>No SQL Server, uma tabela \u00e9 uma rela\u00e7\u00e3o estritamente imposta (portanto, \"<a href=\"https:\/\/en.wikipedia.org\/wiki\/Relational_model\">relacional<\/a>\") que organiza os dados em conjunto.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13006-sql-server-table.png\" alt=\"SQL Server table\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>No Couchbase, n\u00e3o h\u00e1 nenhuma rela\u00e7\u00e3o estritamente imposta, mas no Couchbase 7, h\u00e1 um conceito de <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/learn\/data\/scopes-and-collections.html\">\"cole\u00e7\u00e3o\"<\/a>. Embora isso n\u00e3o possa impor nenhuma restri\u00e7\u00e3o aos dados (a n\u00e3o ser uma chave de documento exclusiva, an\u00e1loga a uma chave prim\u00e1ria), ele ainda pode fornecer o mesmo n\u00edvel de organiza\u00e7\u00e3o de dados.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O utilit\u00e1rio SqlServerToCouchbase criar\u00e1 uma cole\u00e7\u00e3o para cada tabela que encontrar. Se voc\u00ea optar por criar escopos na etapa anterior, essas cole\u00e7\u00f5es ser\u00e3o colocadas dentro do escopo apropriado.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13007-couchbase-collection.png\" alt=\"Couchbase collection\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Dica<\/strong>: Os nomes de tabela no SQL Server podem ser muito mais longos do que os nomes de cole\u00e7\u00e3o no Couchbase Server. Portanto, se estiver migrando um banco de dados com nomes de tabela longos, ser\u00e1 necess\u00e1rio fornecer explicitamente um nome de cole\u00e7\u00e3o novo e mais curto.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_about_converting_the_sql_query\">E quanto \u00e0 convers\u00e3o da consulta SQL?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O utilit\u00e1rio SqlServerToCouchbase (ainda) n\u00e3o converter\u00e1 suas consultas do SQL Server para voc\u00ea, mas aqui est\u00e1 uma compara\u00e7\u00e3o entre uma consulta do SQL Server do AdventureWorks e a consulta equivalente do banco de dados AdventureWorks convertido no Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A consulta tSQL abaixo (extra\u00edda de <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/queries\/from-transact-sql?view=sql-server-ver15#i-using-a-derived-table\">Documenta\u00e7\u00e3o da Microsoft<\/a>) foi projetado para \"retornar o nome e o sobrenome de todos os funcion\u00e1rios e as cidades em que eles moram\".<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\" data-lang=\"SQL\">SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City\r\nFROM AdventureWorks2016.Person.Person AS p\r\nINNER JOIN AdventureWorks2016.HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID\r\nINNER JOIN\r\n   (SELECT bea.BusinessEntityID, a.City\r\n    FROM AdventureWorks2016.Person.Address AS a\r\n    INNER JOIN AdventureWorks2016.Person.BusinessEntityAddress AS bea\r\n    ON a.AddressID = bea.AddressID) AS d\r\nON p.BusinessEntityID = d.BusinessEntityID\r\nORDER BY p.LastName, p.FirstName;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Os resultados dessa consulta:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13010-sql-query-results.png\" alt=\"SQL Server query results\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Com quase nenhuma altera\u00e7\u00e3o, uma consulta muito semelhante pode ser executada como uma consulta N1QL no Couchbase:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\" data-lang=\"SQL\">SELECT RTRIM(p.FirstName) || ' ' || LTRIM(p.LastName) AS Name, d.City\r\nFROM AdventureWorks2016.Person.Person AS p\r\nINNER JOIN AdventureWorks2016.HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID\r\nINNER JOIN\r\n   (SELECT bea.BusinessEntityID, a.City\r\n    FROM AdventureWorks2016.Person.Address AS a\r\n    INNER JOIN AdventureWorks2016.Person.BusinessEntityAddress AS bea\r\n    ON a.AddressID = bea.AddressID) AS d\r\nON p.BusinessEntityID = d.BusinessEntityID\r\nORDER BY p.LastName, p.FirstName;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A \u00fanica diferen\u00e7a na vers\u00e3o N1QL \u00e9 o uso de <code>||<\/code> em vez de <code>+<\/code> para concatena\u00e7\u00e3o de strings, e os resultados sendo JSON em vez de um Result Set:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\" data-lang=\"JavaScript\">[\r\n  { \"City\": \"Bothell\", \"Name\": \"Syed Abbas\" },\r\n  { \"City\": \"Carnation\", \"Name\": \"Kim Abercrombie\" },\r\n  { \"City\": \"Kenmore\", \"Name\": \"Hazem Abolrous\" },\r\n  { \"City\": \"Seattle\", \"Name\": \"Pilar Ackerman\" },\r\n  { \"City\": \"Monroe\", \"Name\": \"Jay Adams\" },\r\n  { \"City\": \"Issaquah\", \"Name\": \"Fran\u00c3\u00a7ois Ajenstat\" },\r\n  { \"City\": \"Renton\", \"Name\": \"Amy Alberts\" },\r\n  { \"City\": \"Bellevue\", \"Name\": \"Greg Alderson\" },\r\n  { \"City\": \"Renton\", \"Name\": \"Sean Alexander\" },\r\n  { \"City\": \"Renton\", \"Name\": \"Gary Altman\" },\r\n  \/\/\/ ... etc ...\r\n]<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso acontece <em>n\u00e3o<\/em> significa que a consulta N1QL est\u00e1 t\u00e3o otimizada quanto poss\u00edvel. Por exemplo, a consulta N1QL acima n\u00e3o usa chaves de documento e talvez possa se beneficiar de mais \u00edndices ou de \u00edndices diferentes. (Como ela s\u00f3 precisa de FirstName, LastName e City, cobrir \u00edndice(s) pode ser apropriado aqui, por exemplo). Mas como essa \u00e9 uma convers\u00e3o de \"n\u00edvel 5\", deve ser suficiente para come\u00e7ar.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_index_to_index_conversion\">Convers\u00e3o de \u00edndice para \u00edndice<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O SQL Server permite que voc\u00ea crie \u00edndices em tabelas para uma ou mais colunas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O Couchbase Server tamb\u00e9m permite que voc\u00ea <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-intro\/queriesandresults.html#indexes\">criar \u00edndices<\/a> em cole\u00e7\u00f5es para um ou mais campos JSON.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O utilit\u00e1rio SqlServerToCouchbase far\u00e1 uma convers\u00e3o direta dos \u00edndices do SQL Server.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por exemplo, um \u00edndice no SQL Server:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code>CREATE INDEX SalesTaxRate_StateProvinceID_TaxType ON AdventureWorks2016.Sales.SalesTaxRate (StateProvinceID, TaxType)<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>se tornar\u00e1 um \u00edndice no Couchbase Server:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code>CREATE INDEX sql_SalesTaxRate_StateProvinceID_TaxType ON AdventureWorks2016.Sales.SalesTaxRate (StateProvinceID, TaxType)<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>O Couchbase converter\u00e1 todos os \u00edndices, mas o n\u00edvel de indexa\u00e7\u00e3o do SQL Server pode ser muito alto ou muito baixo, dependendo das consultas que voc\u00ea planeja executar. Felizmente, o Couchbase Server 6.6 e vers\u00f5es mais recentes t\u00eam um recurso interno de <a href=\"https:\/\/docs.couchbase.com\/server\/current\/tools\/query-workbench.html#index-advisor\">Consultor de \u00edndices<\/a> (um sistema aut\u00f4nomo <a href=\"https:\/\/index-advisor.couchbase.com\/indexadvisor\">A vers\u00e3o baseada na web tamb\u00e9m est\u00e1 dispon\u00edvel<\/a>), que recomendar\u00e1 \u00edndices para qualquer consulta N1QL que voc\u00ea desejar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Observa\u00e7\u00e3o<\/strong>: O Couchbase Server N\u00c3O permite o equivalente a varreduras de tabela completas (ou seja, \u00edndices prim\u00e1rios) por padr\u00e3o. O utilit\u00e1rio SqlServerToCouchbase n\u00e3o cria \u00edndices prim\u00e1rios para cada cole\u00e7\u00e3o. Se voc\u00ea tentar executar uma consulta e receber uma mensagem de erro como \"No index available on keypace\" (Nenhum \u00edndice dispon\u00edvel no espa\u00e7o de chave), essa \u00e9 a sua dica para tentar usar o Index Advisor.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea tamb\u00e9m pode usar o <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/monitor\/monitoring-indexes.html\">Monitor de \u00edndice do Couchbase<\/a> para verificar a Taxa de solicita\u00e7\u00e3o de \u00edndice (entre outras caracter\u00edsticas do \u00edndice). Isso pode ajud\u00e1-lo a identificar os \u00edndices de que voc\u00ea n\u00e3o precisa mais.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_row_to_document\">Linha para o documento<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Depois que os escopos e as cole\u00e7\u00f5es apropriados estiverem instalados, o utilit\u00e1rio SqlServerToCouchbase poder\u00e1 ser usado para obter todas as linhas de dados de cada tabela e grav\u00e1-las em documentos JSON em cada cole\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13001-sql-server-address-row.png\" alt=\"13001 sql server address row\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Na maioria das vezes, os tipos de dados compat\u00edveis com o SQL Server <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-for-oracle-developers-part-4-data-types\/\">mapear bem para JSON<\/a> tipos de dados. Alguns exemplos:<\/p>\n<\/div>\n<div class=\"responsive-table\">\n<table class=\"tableblock frame-all grid-all spread\">\n<colgroup>\n<col style=\"width: 50%\" \/>\n<col style=\"width: 50%\" \/> <\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Tipo de dados do SQL Server<\/th>\n<th class=\"tableblock halign-left valign-top\">Tipo de dados JSON<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">char, varchar, nvarchar, etc<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">string<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">inteiro, decimal, float, real, etc.<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">n\u00famero<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">bit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">booleano<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">data, datetime, hora, etc.<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">string<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>Al\u00e9m disso, h\u00e1 alguns tipos de dados especializados do SQL Server que o utilit\u00e1rio SqlServerToCouchbase tamb\u00e9m \u00e9 capaz de manipular.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por exemplo, a fun\u00e7\u00e3o <code>geografia<\/code> torna-se um objeto JSON aninhado com propriedades como \"Lat\" e \"Long\" e \"Z\". Aqui est\u00e1 o documento convertido para a linha de dados na captura de tela acima.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\" data-lang=\"JavaScript\">{\r\n  \"AddressID\": 1,\r\n  \"AddressLine1\": \"1970 Napa Ct.\",\r\n  \"AddressLine2\": null,\r\n  \"City\": \"Bothell\",\r\n  \"StateProvinceID\": 79,\r\n  \"PostalCode\": \"98011\",\r\n  \"SpatialLocation\": {\r\n    \"IsNull\": false,\r\n    \"STSrid\": 4326,\r\n    \"Lat\": 47.7869921906598,\r\n    \"Long\": -122.164644615406,\r\n    \"Z\": null,\r\n    \"M\": null,\r\n    \"HasZ\": false,\r\n    \"HasM\": false\r\n  },\r\n  \"rowguid\": \"9aadcb0d-36cf-483f-84d8-585c2d4ec6e9\",\r\n  \"ModifiedDate\": \"2007-12-04T00:00:00\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Se houver um tipo de dados espec\u00edfico sobre o qual voc\u00ea esteja curioso, experimente o utilit\u00e1rio SqlServerToCouchbase e veja o que acontece. Se ele n\u00e3o estiver convertendo os dados como voc\u00ea espera, <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\/issues\">crie um problema no GitHub<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_user_to_user\">De usu\u00e1rio para usu\u00e1rio<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O SQL Server suporta uma variedade de tipos de usu\u00e1rios, fun\u00e7\u00f5es de seguran\u00e7a e permiss\u00f5es nos n\u00edveis de banco de dados, esquema e tabela.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O Couchbase Server tem autentica\u00e7\u00e3o baseada em fun\u00e7\u00e3o (RBAC) que tamb\u00e9m permite que v\u00e1rias permiss\u00f5es sejam definidas nos n\u00edveis de bucket, escopo e cole\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O utilit\u00e1rio SqlServerToCouchbase criar\u00e1 usu\u00e1rios correspondentes e far\u00e1 o poss\u00edvel para converter as permiss\u00f5es o m\u00e1ximo poss\u00edvel.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O AdventureWorks n\u00e3o cont\u00e9m nenhum exemplo de usu\u00e1rios com permiss\u00f5es refinadas. Criei meu pr\u00f3prio exemplo para representar um subconjunto de permiss\u00f5es para algumas tabelas no esquema Person.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13008-sql-server-user-permissions-security.png\" alt=\"SQL Server user permissions at the table level\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O usu\u00e1rio correspondente no Couchbase ter\u00e1 permiss\u00f5es semelhantes:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/13009-couchbase-user-permissions-security.png\" alt=\"Couchbase user permissions at the collection level\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Enquanto o SQL Server tem apenas uma API para trabalhar com dados (tSQL), o Couchbase tem v\u00e1rias: N1QL, chave\/valor, pesquisa de texto completo, an\u00e1lise e muito mais. Portanto, o n\u00famero de permiss\u00f5es convertidas para o usu\u00e1rio no Couchbase \u00e9 maior. \u00c0 medida que voc\u00ea avan\u00e7a para o \"n\u00edvel 4\", essas permiss\u00f5es podem ser ajustadas conforme necess\u00e1rio.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Advert\u00eancia<\/strong>: Usu\u00e1rios, autentica\u00e7\u00e3o, autoriza\u00e7\u00e3o e seguran\u00e7a \u00e9 uma \u00e1rea em que se deve ter cuidado e fazer uma revis\u00e3o manual. N\u00e3o deixe que essa etapa seja totalmente automatizada at\u00e9 que voc\u00ea tenha certeza de que o resultado \u00e9 o desejado.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Pr\u00f3ximas etapas<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O utilit\u00e1rio de \"convers\u00e3o\" criar\u00e1 uma convers\u00e3o do Couchbase Server de seu banco de dados do SQL Server. No entanto, atualmente ele n\u00e3o consegue converter nenhum c\u00f3digo de cliente. Esse \u00e9 um problema dif\u00edcil para qualquer migra\u00e7\u00e3o de banco de dados, n\u00e3o apenas do SQL Server para o NoSQL. No entanto, fique de olho neste blog para artigos futuros sobre a migra\u00e7\u00e3o de consultas SQL e c\u00f3digo de cliente!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Enquanto isso, algumas das etapas que voc\u00ea precisar\u00e1 examinar:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Voc\u00ea precisar\u00e1 alterar o acesso aos dados em seu cliente para usar um SDK do Couchbase. Por exemplo, se estiver usando ADO.NET, Dapper, PetaPoco, etc., voc\u00ea poder\u00e1 usar o <a href=\"https:\/\/docs.couchbase.com\/dotnet-sdk\/current\/hello-world\/start-using-sdk.html\">SDK do Couchbase .NET<\/a>.<\/li>\n<li>Usando o Entity Framework? D\u00ea uma olhada na se\u00e7\u00e3o <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\">Projeto Linq2Couchbase<\/a>. (Se estiver usando Java, consulte <a href=\"https:\/\/spring.io\/projects\/spring-data-couchbase\">Dados do Spring Couchbase<\/a>.)<\/li>\n<li>O Couchbase \u00e9 compat\u00edvel com transa\u00e7\u00f5es ACID! Para .NET, <a href=\"https:\/\/www.nuget.org\/packages\/Couchbase.Transactions\/1.0.0-beta.1\">Couchbase.Transa\u00e7\u00f5es<\/a> est\u00e3o atualmente na vers\u00e3o beta. No Couchbase 7, o N1QL tamb\u00e9m oferece suporte a <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/n1ql\/n1ql-language-reference\/begin-transaction.html\"><code>INICIAR\/COMPROMETER\/RETROCEDER TRANSA\u00c7\u00c3O<\/code><\/a><\/li>\n<li>O N1QL do Couchbase \u00e9 uma implementa\u00e7\u00e3o completa de SQL. Entretanto, como todos os dialetos SQL, h\u00e1 diferen\u00e7as entre o N1QL e o tSQL. Algumas consultas podem funcionar como est\u00e3o, mas, na maioria dos casos, \u00e9 prov\u00e1vel que haja diferen\u00e7as de sintaxe. D\u00ea uma olhada no navegador <a href=\"https:\/\/query-tutorial.couchbase.com\/tutorial\/\">Tutorial interativo de N1QL<\/a>.<\/li>\n<li>Procurando uma abordagem semelhante com o MySQL? D\u00ea uma olhada em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/hands-on-migration-from-relational-to-collections\/\">Migra\u00e7\u00e3o pr\u00e1tica de relacional para cole\u00e7\u00f5es<\/a> para uma abordagem semelhante que usa Python \/ CLI.<\/li>\n<li>Est\u00e1 procurando uma abordagem semelhante com o PostgreSQL? D\u00ea uma olhada em <a href=\"https:\/\/github.com\/metonymic-smokey\/couchgres\/tree\/main\/migrate\">Couchgres<\/a>um projeto de c\u00f3digo aberto com suporte da comunidade que usa uma abordagem semelhante com Golang \/ CLI.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O Couchbase Server 7 est\u00e1 definido para ser a maior e mais importante vers\u00e3o do Couchbase Server. Fique de olho no blog do Couchbase para mais artigos como este, criados para ajud\u00e1-lo em sua jornada de convers\u00e3o de SQL para NoSQL.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O Couchbase Server 7 beta est\u00e1 dispon\u00edvel agora mesmo para voc\u00ea <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">Fa\u00e7a o download e experimente<\/a>. Como se trata de uma vers\u00e3o beta, qualquer feedback ou pergunta que voc\u00ea tiver ser\u00e1 muito bem-vindo: confira o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/c\/beta-support\/\">Se\u00e7\u00e3o de suporte beta<\/a> nos f\u00f3runs do Couchbase para o Couchbase Server 7 e outras vers\u00f5es beta\/preview.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>SQL to NoSQL migration seems like a contradiction, but thanks to advances and innovations in Couchbase Server\u2019s NoSQL database, it\u2019s becoming easier. In this post, I\u2019ll introduce you to a tool called SqlServerToCouchbase, an open-source attempt at an automated tool [&hellip;]<\/p>","protected":false},"author":71,"featured_media":10854,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1816,1812],"tags":[9499,1556],"ppma_author":[8937],"class_list":["post-10832","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-couchbase-server","category-n1ql-query","tag-acid-transactions","tag-sql-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL to NoSQL Migration: How to Convert Automatically<\/title>\n<meta name=\"description\" content=\"SQL to NoSQL migration can be at least partially automated. This article helps you find out about the new conversion features available in Couchbase Server 7.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-to-nosql-automated-migration\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL to NoSQL: Automated Migration\" \/>\n<meta property=\"og:description\" content=\"SQL to NoSQL migration can be at least partially automated. This article helps you find out about the new conversion features available in Couchbase Server 7.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-to-nosql-automated-migration\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-02T08:27:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T23:46:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1575\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"SQL to NoSQL: Automated Migration\",\"datePublished\":\"2021-03-02T08:27:36+00:00\",\"dateModified\":\"2025-06-13T23:46:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/\"},\"wordCount\":2175,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg\",\"keywords\":[\"ACID transactions\",\"SQL Server\"],\"articleSection\":[\".NET\",\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/\",\"name\":\"SQL to NoSQL Migration: How to Convert Automatically\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg\",\"datePublished\":\"2021-03-02T08:27:36+00:00\",\"dateModified\":\"2025-06-13T23:46:30+00:00\",\"description\":\"SQL to NoSQL migration can be at least partially automated. This article helps you find out about the new conversion features available in Couchbase Server 7.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg\",\"width\":1575,\"height\":628,\"caption\":\"Couchbase TLS security enhancements in 7.1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL to NoSQL: Automated Migration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL to NoSQL Migration: How to Convert Automatically","description":"A migra\u00e7\u00e3o de SQL para NoSQL pode ser, pelo menos parcialmente, automatizada. Este artigo ajuda voc\u00ea a conhecer os novos recursos de convers\u00e3o dispon\u00edveis no Couchbase Server 7.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/sql-to-nosql-automated-migration\/","og_locale":"pt_BR","og_type":"article","og_title":"SQL to NoSQL: Automated Migration","og_description":"SQL to NoSQL migration can be at least partially automated. This article helps you find out about the new conversion features available in Couchbase Server 7.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/sql-to-nosql-automated-migration\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-03-02T08:27:36+00:00","article_modified_time":"2025-06-13T23:46:30+00:00","og_image":[{"width":1575,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"SQL to NoSQL: Automated Migration","datePublished":"2021-03-02T08:27:36+00:00","dateModified":"2025-06-13T23:46:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/"},"wordCount":2175,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg","keywords":["ACID transactions","SQL Server"],"articleSection":[".NET","Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/","url":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/","name":"SQL to NoSQL Migration: How to Convert Automatically","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg","datePublished":"2021-03-02T08:27:36+00:00","dateModified":"2025-06-13T23:46:30+00:00","description":"A migra\u00e7\u00e3o de SQL para NoSQL pode ser, pelo menos parcialmente, automatizada. Este artigo ajuda voc\u00ea a conhecer os novos recursos de convers\u00e3o dispon\u00edveis no Couchbase Server 7.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/130-hero-sql-to-nosql-handoff.jpg","width":1575,"height":628,"caption":"Couchbase TLS security enhancements in 7.1"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL to NoSQL: Automated Migration"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/10832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=10832"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/10832\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/10854"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=10832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=10832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=10832"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=10832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}