{"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\/es\/sql-to-nosql-automated-migration\/","title":{"rendered":"De SQL a NoSQL: Migraci\u00f3n automatizada"},"content":{"rendered":"<div class=\"paragraph\">\n<p>La migraci\u00f3n de SQL a NoSQL parece una contradicci\u00f3n, pero gracias a los avances e innovaciones de la base de datos NoSQL de Couchbase Server, cada vez es m\u00e1s f\u00e1cil.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En este post, te presentar\u00e9 una herramienta llamada <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\">SqlServerToCouchbase<\/a>un intento de herramienta automatizada de c\u00f3digo abierto para ayudarte a \"convertir\" una base de datos Microsoft SQL Server en una base de datos Couchbase Server. Por el camino, veremos estrategias de migraci\u00f3n de datos, comparaciones entre t\u00e9rminos SQL y NoSQL, y compensaciones entre los dos tipos de bases de datos. <strong>Aunque no utilices SQL Server o Couchbase Server<\/strong>este art\u00edculo puede ayudarle en sus esfuerzos de conversi\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de empezar, hay que tener en cuenta que el cambio entre dos bases de datos cualesquiera (de SQL a NoSQL <em>o<\/em> SQL to SQL) es muy parecido a traducir entre dos idiomas. Existen automatismos como Babelfish, Google Translate, etc. Son herramientas muy \u00fatiles para empezar. Son herramientas muy \u00fatiles para empezar, pero no sustituyen a la inmersi\u00f3n en el 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\">#fallo de traducci\u00f3n de Google<\/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 mayo 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>M\u00e1s all\u00e1 de la traducci\u00f3n de la sintaxis, tambi\u00e9n est\u00e1n los modismos y la cultura que rodean a cualquier tecnolog\u00eda. Ninguna herramienta de automatizaci\u00f3n puede captar todos los matices, pero vamos a intentarlo para ver hasta d\u00f3nde podemos llegar.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_strategies_to_migrate_data_from_sql_to_nosql\">Convertir SQL a NoSQL: Estrategias de migraci\u00f3n de datos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Si est\u00e1s considerando migrar datos de SQL Server a Couchbase (o de cualquier base de datos relacional a Couchbase), el primer paso es llegar a un acuerdo sobre tus objetivos y planes de alto nivel. Hay varios caminos a seguir, y cada uno de ellos ofrece un equilibrio entre riesgo, esfuerzo y beneficios. Aqu\u00ed tienes algunos ejemplos de c\u00f3mo convertir SQL a 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\">Nivel<\/th>\n<th class=\"tableblock halign-left valign-top\">Descripci\u00f3n<\/th>\n<th class=\"tableblock halign-left valign-top\">Riesgo<\/th>\n<th class=\"tableblock halign-left valign-top\">Esfuerzo<\/th>\n<th class=\"tableblock halign-left valign-top\">Beneficios<\/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>Vuelva a escribir<\/strong>: No hay migraci\u00f3n, escr\u00edbelo todo<\/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>Redise\u00f1ar el esquema<\/strong>: Mantenga su l\u00f3gica de negocio, reescriba su capa de datos y esquema, redise\u00f1e totalmente su esquema con un modelo optimizado 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>Refactorizar primero<\/strong>: Conserve todo, pero refactorice su l\u00f3gica de datos y esquema RDBMS en un modelo optimizado 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>Optimizar m\u00e1s tarde<\/strong>: Alojar el esquema con el menor n\u00famero de cambios posible, hacer que la aplicaci\u00f3n funcione con la nueva tecnolog\u00eda, refactorizar\/optimizar el esquema seg\u00fan sea necesario para mejorar el rendimiento.<\/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>S\u00f3lo acogerlo<\/strong>: Aloje su esquema con el menor n\u00famero de cambios posible.<\/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>Hist\u00f3ricamente, las bases de datos NoSQL se han centrado en la reconstrucci\u00f3n de \"Nivel 1\" o en proyectos greenfield. Aunque este enfoque permite obtener el m\u00e1ximo beneficio de NoSQL desde el principio, las reconstrucciones son siempre caras y arriesgadas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Sin embargo, Couchbase Server, junto con las nuevas capacidades que incorpora Couchbase Server 7 (puede descargar <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">Couchbase 7 beta ahora mismo<\/a>), permite un enfoque de nivel 5 (seguido del nivel 4) que reduce el riesgo y el coste de probar NoSQL. No necesariamente cosechar\u00e1 <strong>todos<\/strong> los beneficios de NoSQL de inmediato, pero empezar es m\u00e1s f\u00e1cil que nunca.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_convert_from_sql_to_nosql\">Convertir una consulta SQL en una consulta NoSQL<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La mayor\u00eda de los desarrolladores y usuarios de bases de datos est\u00e1n familiarizados con las bases de datos relacionales. Esquemas, tablas, filas y columnas, consultas SQL, transacciones ACID. El lenguaje de consulta de Couchbase (N1QL) reconoce desde hace tiempo que SQL es la <em>lingua franca<\/em> de bases de datos. N1QL actualmente proporciona capacidades SQL completas, incluyendo JOINs, indexaci\u00f3n robusta, agregaci\u00f3n, CTEs, y m\u00e1s. Esto hace que sea relativamente sencillo para los desarrolladores SQL ser productivos incluso como reci\u00e9n llegados a la oferta NoSQL de Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Consejo<\/strong>: Comprobar <a href=\"https:\/\/www.techvalidate.com\/product-research\/couchbase\/charts\/2A1-8B3-4BC\">Por qu\u00e9 los desarrolladores valoran Couchbase<\/a> y otras investigaciones independientes de TechValidate.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u00bfY si la mayor\u00eda de los otros conceptos relacionales pudieran traducirse y convertirse con la misma facilidad? Veamos c\u00f3mo los conceptos de SQL Server podr\u00edan ser mapeados a conceptos de 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\">Servidor SQL<\/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\">Grupo<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Una de las principales ventajas de NoSQL es la escalabilidad y la alta disponibilidad que proporciona la agrupaci\u00f3n en cl\u00fasteres.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cat\u00e1logo\/Base de datos<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cubo<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Los buckets de Couchbase tambi\u00e9n ofrecen una cach\u00e9 integrada para mejorar el rendimiento.<\/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\">Alcance<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Esquema es a menudo s\u00f3lo \"dbo\" en SQL Server, pero no siempre.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cuadro<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Colecci\u00f3n<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Las colecciones son m\u00e1s flexibles: no hay columnas predefinidas ni restricciones<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Fila<\/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 en lugar de datos planos<\/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\">N1QL no es \"SQL-like\", es una implementaci\u00f3n completa de SQL con extensiones JSON, a veces llamada SQL++.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Clave principal<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Clave del documento<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Las claves primarias deben ser \u00fanicas por tabla, las claves documentales deben ser \u00fanicas por colecci\u00f3n<\/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 en columna(s), Couchbase: \u00cdndices sobre campo(s) JSON<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>Con este mapeo como base, \u00bfpodemos escribir un programa para convertir autom\u00e1ticamente el contenido de una base de datos SQL Server a una base de datos Couchbase Server?<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Creo que podemos recorrer la mayor parte del camino, y he creado un proyecto de c\u00f3digo abierto llamado <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\">SqlServerToCouchbase<\/a> para hacer precisamente eso.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_database_catalog_to_bucket\">Convertir base de datos SQL a NoSQL\/Cat\u00e1logo a Bucket<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Voy a utilizar el <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/samples\/adventureworks-install-configure#download-backup-files\">AdventureWorks<\/a> muestras proporcionadas por Microsoft en SQL Server. Voy a migrar a una base de datos Couchbase 7 (<a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">actualmente en beta<\/a>pero probablemente ser\u00e1 RTM este a\u00f1o).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Nota<\/strong>: Estoy usando AdventureWorks2016 porque es la versi\u00f3n de SQL Server que tengo disponible. La mayor\u00eda de las versiones anteriores y m\u00e1s recientes deber\u00edan funcionar bien, pero si te encuentras con alg\u00fan problema, <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\">cree una incidencia en 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>Puede crear un bucket manualmente en Couchbase Server, o puede hacer que la utilidad cree el bucket por usted autom\u00e1ticamente.<\/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\">Del esquema al \u00e1mbito de aplicaci\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En SQL Server, un <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/framework\/data\/adonet\/sql\/ownership-and-user-schema-separation-in-sql-server\">esquema<\/a> es como un \"espacio de nombres\" que le permite agrupar objetos (como tablas) con fines de organizaci\u00f3n\/seguridad. Por ejemplo, AdventureWorks contiene esquemas como HumanResources, Person, Production, etc.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Muchos proyectos no utilizan realmente esquemas distintos del esquema \"dbo\" por defecto. Sin embargo, se puede utilizar un esquema para agrupar datos para un microservicio espec\u00edfico o un inquilino espec\u00edfico en una aplicaci\u00f3n multiinquilino.<\/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>En Couchbase 7, existe un concepto muy similar llamado <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/learn\/data\/scopes-and-collections.html\">\"\u00e1mbito\"<\/a>. Proporciona las mismas ventajas de organizaci\u00f3n y seguridad para microservicios o multi-tenancy.<\/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>Seg\u00fan sus preferencias, la utilidad SqlServerToCouchbase puede crear \u00e1mbitos basados en los esquemas de SQL Server, o puede ignorarlos y poner todo en un esquema llamado \"_default\" (que equivale aproximadamente a \"dbo\"). En el ejemplo anterior, he optado por crear \u00e1mbitos para cada esquema de AdventureWorks.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_table_to_collection\">De la mesa a la colecci\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En SQL Server, una tabla es una relaci\u00f3n estricta (de ah\u00ed \"<a href=\"https:\/\/en.wikipedia.org\/wiki\/Relational_model\">relacional<\/a>\") que organiza los datos de forma conjunta.<\/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>En Couchbase, no existe una relaci\u00f3n estrictamente forzada, pero en Couchbase 7, existe el concepto de un <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/learn\/data\/scopes-and-collections.html\">\"colecci\u00f3n\"<\/a>. Aunque no podr\u00e1 imponer ninguna restricci\u00f3n a los datos (aparte de una clave de documento \u00fanica, an\u00e1loga a una clave primaria), puede proporcionar el mismo nivel de organizaci\u00f3n de datos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La utilidad SqlServerToCouchbase crear\u00e1 una colecci\u00f3n para cada tabla que encuentre. Si elegiste crear \u00e1mbitos en el paso anterior, esas colecciones se colocar\u00e1n dentro del \u00e1mbito apropiado.<\/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>Consejo<\/strong>: Los nombres de tabla en SQL Server pueden ser mucho m\u00e1s largos que los nombres de colecci\u00f3n en Couchbase Server. Por lo tanto, si est\u00e1s migrando una base de datos con nombres de tabla largos, tendr\u00e1s que proporcionar expl\u00edcitamente un nuevo nombre de colecci\u00f3n m\u00e1s corto.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_about_converting_the_sql_query\">\u00bfY la conversi\u00f3n de la consulta SQL?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La utilidad SqlServerToCouchbase no convertir\u00e1 (todav\u00eda) tus consultas SQL Server por ti, pero aqu\u00ed tienes una comparaci\u00f3n entre una consulta SQL Server de AdventureWorks y la consulta equivalente de la base de datos AdventureWorks convertida en Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La siguiente consulta tSQL (tomada 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\">Documentaci\u00f3n de Microsoft<\/a>) est\u00e1 dise\u00f1ado para \"devolver el nombre y apellidos de todos los empleados y las ciudades en las que viven\".<\/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>Los resultados de esta 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>Sin apenas cambios, una consulta muy similar puede ejecutarse como una consulta N1QL en 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>La \u00fanica diferencia en la versi\u00f3n N1QL es el uso de <code>||<\/code> en lugar de <code>+<\/code> para la concatenaci\u00f3n de cadenas, y los resultados son JSON en lugar de un conjunto de resultados:<\/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>Esto no <em>no<\/em> significa que la consulta N1QL est\u00e1 lo m\u00e1s optimizada posible. Por ejemplo, la consulta N1QL anterior no utiliza claves de documento, y tal vez podr\u00eda beneficiarse de m\u00e1s o diferentes \u00edndices. (Dado que s\u00f3lo necesita FirstName, LastName y City, cubrir el \u00edndice(s) podr\u00eda ser apropiado aqu\u00ed, por ejemplo). Pero como se trata de una conversi\u00f3n de \"nivel 5\", deber\u00eda ser suficiente para empezar.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_index_to_index_conversion\">Conversi\u00f3n de \u00edndice a \u00edndice<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>SQL Server permite crear \u00edndices en tablas para una o varias columnas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Couchbase Server tambi\u00e9n le permite <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-intro\/queriesandresults.html#indexes\">crear \u00edndices<\/a> en colecciones para uno o m\u00e1s campos JSON.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La utilidad SqlServerToCouchbase realizar\u00e1 una conversi\u00f3n directa de los \u00edndices de SQL Server.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por ejemplo, un \u00edndice en 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 convertir\u00e1 en un \u00edndice en 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>Couchbase convertir\u00e1 todos los \u00edndices, pero el nivel de indexaci\u00f3n de SQL Server puede ser demasiado alto o demasiado bajo, dependiendo de las consultas que planees ejecutar. Afortunadamente, Couchbase Server 6.6 y posteriores tienen una funci\u00f3n integrada de <a href=\"https:\/\/docs.couchbase.com\/server\/current\/tools\/query-workbench.html#index-advisor\">Asesor de \u00edndices<\/a> (un <a href=\"https:\/\/index-advisor.couchbase.com\/indexadvisor\">tambi\u00e9n est\u00e1 disponible la versi\u00f3n web<\/a>), que le recomendar\u00e1 \u00edndices para cualquier consulta N1QL que desee.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Nota<\/strong>: Couchbase Server NO permite el equivalente de escaneos completos de tablas (es decir, \u00edndices primarios) por defecto. La utilidad SqlServerToCouchbase no crea \u00edndices primarios para cada colecci\u00f3n. Si intenta ejecutar una consulta y obtener un mensaje de error como \"No hay \u00edndice disponible en keyspace\", esta es su se\u00f1al para tratar de utilizar el Index Advisor.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n puede utilizar la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/monitor\/monitoring-indexes.html\">Monitor de \u00edndices Couchbase<\/a> para comprobar la Tasa de Solicitud de \u00cdndices (entre otras caracter\u00edsticas de los \u00edndices). Esto puede ayudarte a identificar \u00edndices que ya no necesitas.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_row_to_document\">Fila al documento<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Una vez que los \u00e1mbitos y las colecciones apropiadas est\u00e1n en su lugar, la utilidad SqlServerToCouchbase se puede utilizar para obtener todas las filas de datos de cada tabla y escribirlas en documentos JSON en cada colecci\u00f3n.<\/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>En su mayor parte, los tipos de datos admitidos por SQL Server <a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-for-oracle-developers-part-4-data-types\/\">mapear bien a JSON<\/a> tipos de datos. Algunos ejemplos:<\/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 datos SQL Server<\/th>\n<th class=\"tableblock halign-left valign-top\">Tipo de datos 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\">cadena<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">entero, decimal, flotante, 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\">fecha, hora, etc.<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">cadena<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>Adem\u00e1s, hay algunos tipos de datos especializados de SQL Server que la utilidad SqlServerToCouchbase tambi\u00e9n es capaz de manejar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por ejemplo, SQL Server <code>geograf\u00eda<\/code> se convierte en un objeto JSON anidado con propiedades como \"Lat\" y \"Long\" y \"Z\". Este es el documento convertido para la fila de datos de la captura de pantalla anterior.<\/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>Si hay un tipo de datos espec\u00edfico sobre el que tienes curiosidad, prueba la utilidad SqlServerToCouchbase y mira a ver qu\u00e9 pasa. Si no convierte los datos como esperabas, <a href=\"https:\/\/github.com\/mgroves\/SqlServerToCouchbase\/issues\">cree una incidencia en GitHub<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_user_to_user\">De usuario a usuario<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>SQL Server admite diversos tipos de usuarios, funciones de seguridad y permisos a nivel de base de datos, esquema y tabla.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Couchbase Server tiene autenticaci\u00f3n basada en roles (RBAC) que tambi\u00e9n permite establecer una variedad de permisos a nivel de cubo, \u00e1mbito y colecci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La utilidad SqlServerToCouchbase crear\u00e1 usuarios coincidentes y har\u00e1 todo lo posible para convertir los permisos en la medida de lo posible.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>AdventureWorks no contiene ejemplos de usuarios con permisos detallados. Cre\u00e9 los m\u00edos propios para representar un subconjunto de permisos para algunas tablas en el esquema Persona.<\/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>El usuario correspondiente en Couchbase tendr\u00e1 permisos similares:<\/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>Mientras que SQL Server s\u00f3lo tiene una API para trabajar con datos (tSQL), Couchbase tiene m\u00faltiples: N1QL, clave\/valor, b\u00fasqueda de texto completo, anal\u00edtica y m\u00e1s. De ah\u00ed que el n\u00famero de permisos convertidos al usuario en Couchbase sea mayor. A medida que se avanza al \"nivel 4\", estos pueden ser ajustados seg\u00fan sea necesario.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Advertencia<\/strong>: Usuarios, autenticaci\u00f3n, autorizaci\u00f3n y seguridad es un \u00e1rea en la que definitivamente se debe tener precauci\u00f3n y revisi\u00f3n manual. No deje que este paso sea completamente automatizado hasta que est\u00e9 seguro de que el resultado es el que desea.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Pr\u00f3ximos pasos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La utilidad de \"conversi\u00f3n\" crear\u00e1 una conversi\u00f3n a Couchbase Server de tu base de datos SQL Server. Sin embargo, actualmente no puede convertir ning\u00fan c\u00f3digo de cliente. Ese es un problema dif\u00edcil para cualquier migraci\u00f3n de base de datos, no s\u00f3lo de SQL Server a NoSQL. Sin embargo, \u00a1no pierdas de vista este blog para futuros art\u00edculos sobre la migraci\u00f3n de consultas SQL y c\u00f3digo de cliente!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Mientras tanto, algunos de los pasos que tendr\u00e1 que mirar:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Tendr\u00e1s que cambiar el acceso a datos en tu cliente para usar un SDK de Couchbase. Por ejemplo, si est\u00e1s usando ADO.NET, Dapper, PetaPoco, etc, puedes usar el comando <a href=\"https:\/\/docs.couchbase.com\/dotnet-sdk\/current\/hello-world\/start-using-sdk.html\">SDK .NET de Couchbase<\/a>.<\/li>\n<li>\u00bfUtiliza Entity Framework? Consulte la <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\">Proyecto Linq2Couchbase<\/a>. (Si utiliza Java, consulte <a href=\"https:\/\/spring.io\/projects\/spring-data-couchbase\">Spring Data Couchbase<\/a>.)<\/li>\n<li>Couchbase soporta transacciones ACID. Para .NET, <a href=\"https:\/\/www.nuget.org\/packages\/Couchbase.Transactions\/1.0.0-beta.1\">Couchbase.Transacciones<\/a> est\u00e1n actualmente en fase beta. En Couchbase 7, N1QL tambi\u00e9n soporta <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/n1ql\/n1ql-language-reference\/begin-transaction.html\"><code>INICIAR\/COMPROMETER\/RETROCEDER TRANSACCI\u00d3N<\/code><\/a><\/li>\n<li>N1QL de Couchbase es una implementaci\u00f3n completa de SQL. Sin embargo, como todos los dialectos SQL, hay diferencias entre N1QL y tSQL. Algunas consultas pueden funcionar tal cual, pero en la mayor\u00eda de los casos es probable que haya diferencias sint\u00e1cticas. Echa un vistazo al navegador <a href=\"https:\/\/query-tutorial.couchbase.com\/tutorial\/\">tutorial interactivo de N1QL<\/a>.<\/li>\n<li>\u00bfBusca un enfoque similar con MySQL? Consulte <a href=\"https:\/\/www.couchbase.com\/blog\/es\/hands-on-migration-from-relational-to-collections\/\">Migraci\u00f3n pr\u00e1ctica de sistemas relacionales a colecciones<\/a> para un enfoque similar que utiliza Python \/ CLI.<\/li>\n<li>\u00bfBusca un enfoque similar con PostgreSQL? Eche un vistazo a <a href=\"https:\/\/github.com\/metonymic-smokey\/couchgres\/tree\/main\/migrate\">Couchgres<\/a>un proyecto de c\u00f3digo abierto apoyado por la comunidad que utiliza un enfoque similar con Golang \/ CLI.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumen<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Couchbase Server 7 ser\u00e1 la versi\u00f3n m\u00e1s grande e importante de Couchbase Server. No pierdas de vista el blog de Couchbase para leer m\u00e1s art\u00edculos como este, dise\u00f1ados para ayudarte en tu viaje de conversi\u00f3n de SQL a NoSQL.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Couchbase Server 7 beta ya est\u00e1 disponible para que usted <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">descargar y probar<\/a>. Dado que se trata de una versi\u00f3n beta, agradeceremos cualquier comentario o pregunta que tenga: consulte la p\u00e1gina <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/c\/beta-support\/\">Secci\u00f3n de asistencia Beta<\/a> en los foros de Couchbase para Couchbase Server 7 y otras versiones 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 v25.8 (Yoast SEO v25.8) - 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\/es\/sql-to-nosql-automated-migration\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL to NoSQL Migration: How to Convert Automatically","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.","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\/es\/sql-to-nosql-automated-migration\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/sql-to-nosql-automated-migration\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"es","@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":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/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":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/10832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=10832"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/10832\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/10854"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=10832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=10832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=10832"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=10832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}