{"id":7155,"date":"2019-07-09T05:08:36","date_gmt":"2019-07-09T12:08:36","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7155"},"modified":"2025-06-13T23:42:49","modified_gmt":"2025-06-14T06:42:49","slug":"how-to-use-n1ql-to-migrate-oracle-data-into-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/","title":{"rendered":"C\u00f3mo utilizar N1QL para migrar datos de Oracle a Couchbase"},"content":{"rendered":"<p>Conseguir que el servidor Couchbase funcione en tu PC o Mac implica unos sencillos pasos para descargar el software y poner en marcha un cl\u00faster con todos los servicios Couchbase que necesitas (<a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/getting-started\/start-here.html\">https:\/\/docs.couchbase.com\/server\/6.0\/getting-started\/start-here.html<\/a>). El software incluye cubos de muestras para que pueda empezar a utilizar el producto en cuesti\u00f3n de minutos.<\/p>\n<p>Si necesita migrar su base de datos relacional a Couchbase, hay conectores disponibles (<a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/connectors\/intro.html\">https:\/\/docs.couchbase.com\/server\/6.0\/connectors\/intro.html<\/a>) que te permitir\u00eda alcanzar el objetivo. Sin embargo, si est\u00e1s familiarizado tanto con RDBMS como con las herramientas de base de datos de Couchbase, podr\u00edas aprovechar tu herramienta de exportaci\u00f3n de datos de base de datos, y luego utilizar Couchbase <strong>cbimport<\/strong> para cargar los datos en un bucket de Couchbase.<\/p>\n<p>Con cualquiera de los dos m\u00e9todos, tendr\u00e1 que tomar algunas decisiones, debido a las diferencias entre las bases de datos:<\/p>\n<ol>\n<li>Tablas RDBMS frente a buckets Couchbase.<\/li>\n<li>Claves primarias de base de datos y claves de documento de bucket.<\/li>\n<li>Por \u00faltimo, pero no menos importante, c\u00f3mo transformar tu esquema de base de datos relacional a una base de datos de documentos JSON de Couchbase.<\/li>\n<\/ol>\n<p>En este blog, discutir\u00e9 estas diferencias, y esbozar\u00e9 las diferentes estrategias que podr\u00edas considerar para transformar el esquema de tu base de datos relacional a la base de datos NoSQL de Couchbase. Mientras que la t\u00e9cnica de migraci\u00f3n se puede generalizar para muchos RDBMS, el proceso real de consulta de la base de datos de origen aprovecha sus API REST espec\u00edficas. Por esta raz\u00f3n, usar\u00e9 Oracle y su esquema de ejemplo de RRHH como datos de origen, y aprovechar\u00e9 sus Servicios de Datos REST para la extracci\u00f3n de datos.<\/p>\n<h4>Qu\u00e9 herramientas necesita<\/h4>\n<p>Las t\u00e9cnicas de migraci\u00f3n de este blog aprovechan los servicios b\u00e1sicos de la base de datos Oracle y el lenguaje de consulta N1QL de Couchbase. No necesitas nada m\u00e1s.<\/p>\n<h4>C\u00f3mo utilizar estas t\u00e9cnicas de migraci\u00f3n<\/h4>\n<p>Los scripts N1QL proporcionados abordan las dos primeras cuestiones de tipo de documento y clave de documento. Para la transformaci\u00f3n del esquema relacional a la base de datos JSON de Couchbase, los scripts cubren estos tres escenarios:<\/p>\n<ol>\n<li>Asignaci\u00f3n directa de tabla a tipo de documento. No interviene ninguna transformaci\u00f3n.<\/li>\n<li>Desnormalizaci\u00f3n del objeto padre en objeto hijo.<\/li>\n<li>Desnormalizaci\u00f3n de objetos hijos en el padre como un campo de matriz.<\/li>\n<\/ol>\n<p>Los escenarios anteriores, con las soluciones de tipo de documento y clave de documento, deber\u00edan cubrir la mayor\u00eda de los casos de uso para transformar un esquema relacional en una base de datos de documentos JSON.<\/p>\n<h4>Requisitos previos<\/h4>\n<ol>\n<li>Acceso a un servidor de base de datos Oracle con el esquema de ejemplo HR.<\/li>\n<li>Acceso a una base de datos Couchbase, donde deber\u00e1 crear un bucket <strong>cbhr<\/strong> como destino para la migraci\u00f3n del esquema Oracle HR.<\/li>\n<\/ol>\n<h4>Los pasos<\/h4>\n<ol>\n<li>Habilite su esquema Oracle para el acceso a Servicios de datos REST.<\/li>\n<li>Configure un servidor Couchbase y configure el bucket para recibir los datos de Oracle HR.<\/li>\n<li>Decida las t\u00e9cnicas de transformaci\u00f3n del modelo de datos para su requisito de migraci\u00f3n.<\/li>\n<li>Edite y ejecute el script N1QL para migrar los datos.<\/li>\n<\/ol>\n<h3>Base de datos Oracle con el esquema HR<\/h3>\n<p>El esquema Oracle HR est\u00e1 disponible en su instalaci\u00f3n Oracle. Siga la documentaci\u00f3n de Oracle para desplegar el esquema. <a href=\"https:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e10831\/installation.htm#COMSC001\">https:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e10831\/installation.htm#COMSC001<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7161\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM.png\" alt=\"\" width=\"971\" height=\"572\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM.png 1880w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM-300x177.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM-1024x604.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM-768x453.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM-1536x905.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM-20x12.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.26.40-PM-1320x778.png 1320w\" sizes=\"auto, (max-width: 971px) 100vw, 971px\" \/><\/a><\/p>\n<h3>Habilitar esquema Oracle para servicios REST<\/h3>\n<p>Por defecto, el servicio de datos Oracle REST no est\u00e1 habilitado en el esquema. Deber\u00e1 habilitarlo para el esquema HR.<\/p>\n<p>Inicie sesi\u00f3n como el usuario que realizar\u00e1 las llamadas REST. En este ejemplo, inicie sesi\u00f3n como <strong>hr<\/strong>y ejecute el siguiente script.<\/p>\n<pre class=\"lang:plsql decode:true\">BEGIN\r\n   ORDS.ENABLE_SCHEMA( p_enabled =&gt; TRUE\r\n                     , p_schema =&gt; 'HR'\r\n                     , p_url_mapping_type =&gt; 'BASE_PATH'\r\n                     , p_url_mapping_pattern =&gt; 'hr'\r\n                     , p_auto_rest_auth =&gt; FALSE);\r\n   commit;\r\nEND;<\/pre>\n<p>Referencia: <a href=\"https:\/\/blogs.oracle.com\/oraclemagazine\/get-your-rest-post-your-sql\">https:\/\/blogs.oracle.com\/oraclemagazine\/get-your-rest-post-your-sql<\/a><\/p>\n<p>Compruebe que puede consultar su Oracle con una llamada REST. https:\/\/:8080\/ords\/hrrest\/employees\/<\/p>\n<p>Nota: de forma predeterminada, el servicio Oracle REST Enabled SQL est\u00e1 desactivado. Para configurar los ajustes del servicio REST Enabled SQL, consulte <a href=\"https:\/\/docs.oracle.com\/database\/ords-17.3\/AELIG\/configuring-REST-data-services.htm#AELIG7195\">Configuraci\u00f3n de los ajustes del servicio SQL habilitado para REST<\/a>.<\/p>\n<h3>Prepare su servidor Couchbase<\/h3>\n<p>Hay dos pasos que debe completar en la configuraci\u00f3n del servidor Couchbase.<\/p>\n<ol>\n<li>Crear un cubo con el nombre <code>cbhr<\/code>. El tama\u00f1o del cubo depender\u00e1 del volumen de los datos que tenga previsto migrar.<\/li>\n<li>Aseg\u00farese de habilitar el acceso a la funci\u00f3n CURL() en la configuraci\u00f3n de Couchbase Server.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7185\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/Screen-Shot-2019-07-09-at-7.32.05-AM.png\" alt=\"\" width=\"516\" height=\"157\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-09-at-7.32.05-AM.png 516w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-09-at-7.32.05-AM-300x91.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-09-at-7.32.05-AM-20x6.png 20w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/p>\n<p>3. Tambi\u00e9n tendr\u00e1 que crear un \u00edndice primario en el archivo <code>cbhr<\/code> para permitir que N1QL consulte el bucket como parte de la migraci\u00f3n.<\/p>\n<div>\n<pre class=\"lang:default decode:true\">CREATE PRIMARY INDEX `#primary` ON `cbhr`<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<h3>Transformaci\u00f3n del modelo de datos<\/h3>\n<p>La migraci\u00f3n de Relational a NoSQL es un gran paso, y este blog no cubre los pros y los contras de cada una de estas bases de datos. Sin embargo, debido a las diferencias en la forma en que se almacenan los datos, tendr\u00e1 que tomar una decisi\u00f3n sobre c\u00f3mo desea gestionar estos cambios. Los scripts N1QL de este blog transformar\u00e1n el esquema de Oracle HR en el siguiente modelo de datos JSON de Couchbase, utilizando las siguientes estrategias:<\/p>\n<ol>\n<li>Regiones, Pa\u00edses, Localidades son entidades padre directas e indirectas de los Departamentos. As\u00ed que podr\u00edamos desnormalizar el padre\/abuelo\/tatarabuelo en la entidad Departamento. Esto reducir\u00e1 la necesidad de JOINs cuando se necesite esta informaci\u00f3n en la consulta. Adem\u00e1s, otras entidades asociadas como Employees y Job_History s\u00f3lo tienen una referencia al department_id.  Por esta raz\u00f3n, tendr\u00eda sentido desnormalizar la informaci\u00f3n sobre la regi\u00f3n, el pa\u00eds y la ubicaci\u00f3n de un departamento en el objeto 'department' del modelo JSON de Couchbase.<\/li>\n<li>La entidad Empleos incluye la informaci\u00f3n sobre la escala salarial. Podr\u00eda tratarse de datos sensibles. Por esta raz\u00f3n, utilizaremos una migraci\u00f3n directa de este objeto sin ninguna transformaci\u00f3n.<\/li>\n<li>La entidad Empleados incluye otra informaci\u00f3n asociada, como job_id y department_id, que son atributos importantes para un empleado. Tendr\u00eda sentido desnormalizar el T\u00edtulo del puesto y el Nombre del departamento en el objeto 'empleado'.<\/li>\n<li>La entidad Job_History es en realidad un objeto hijo de la entidad Employees. Por lo tanto, tendr\u00eda sentido incluir el historial laboral del empleado en el objeto 'empleado'.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7164 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/Screen-Shot-2019-07-06-at-12.44.35-PM.png\" alt=\"\" width=\"1412\" height=\"620\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.44.35-PM.png 1412w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.44.35-PM-300x132.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.44.35-PM-1024x450.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.44.35-PM-768x337.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.44.35-PM-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.44.35-PM-1320x580.png 1320w\" sizes=\"auto, (max-width: 1412px) 100vw, 1412px\" \/><\/p>\n<h4>Tabla vs. Tipo de documento<\/h4>\n<p>En Couchbase no se aplica el concepto de tabla. Todos los documentos pueden ser almacenados en un \u00fanico bucket con el uso de un <strong>tipo<\/strong> para diferenciar el tipo de documento. Esto es posible porque no hay restricciones de esquema entre diferentes documentos en la base de datos NoSQL de Couchbase.<\/p>\n<p>El script incluido se encarga de esto incluyendo un <strong>tipo_doc<\/strong> con el valor del nombre de la tabla de origen.<\/p>\n<pre class=\"lang:default decode:true\">SELECT 'employee' doc_type ...\u00a0 FROM hr.employees...<\/pre>\n<h4>Asignaci\u00f3n de claves primarias<\/h4>\n<p>Una tabla Oracle normalmente tendr\u00eda una clave primaria, y puedes verlo en el esquema HR. Los documentos de Couchbase tambi\u00e9n necesitan una clave primaria. Sin embargo, como todos los datos de la tabla Oracle residir\u00e1n en un \u00fanico bucket de Couchbase, necesitamos una forma de diferenciar entre los valores clave de estos tipos de documentos en Couchbase.<\/p>\n<p>La secuencia de comandos incluida se encarga de esto mediante la construcci\u00f3n del archivo <strong>doc_key<\/strong> utilizando el nombre de la tabla Oracle HR y su valor de clave primaria.<\/p>\n<pre class=\"lang:default decode:true\">SELECT 'employee:' ||e.employee_id doc_key FROM hr.employees ...<\/pre>\n<h3>Documento JSON de Relational a Couchbase<\/h3>\n<p>No hay una regla r\u00edgida y r\u00e1pida sobre c\u00f3mo debe transformar su esquema relacional a NoSQL. Podr\u00edas migrar todas las tablas a un bucket de Couchbase, cada una con su propia <strong>tipo_doc<\/strong> campo.<\/p>\n<h4>Tabla directa al documento<\/h4>\n<p>Este es el caso m\u00e1s sencillo, en el que s\u00f3lo el <strong>tipo_doc<\/strong> y <strong>doc_key<\/strong> se a\u00f1aden al documento Couchbase. El objeto relacional no requiere ninguna transformaci\u00f3n durante el proceso de migraci\u00f3n.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7159\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/Screen-Shot-2019-07-06-at-12.21.02-PM.png\" alt=\"\" width=\"710\" height=\"200\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.21.02-PM.png 1022w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.21.02-PM-300x85.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.21.02-PM-768x216.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.21.02-PM-20x6.png 20w\" sizes=\"auto, (max-width: 710px) 100vw, 710px\" \/><\/p>\n<pre class=\"lang:default decode:true\">UPSERT INTO cbhr (key ndoc.doc_key,value ndoc) \r\n   SELECT ndoc.doc_key, ndoc\r\n   FROM CURL(\"https:\/\/&lt;your_server_ip&gt;:8080\/ords\/hr\/_\/sql\", \r\n              { \"request\":\"POST\",\"header\":\"Content-Type: application\/sql\"\r\n              , \"data\":\"SELECT 'job' doc_type, 'job:'||j.job_id doc_key, j.* \r\n                      FROM jobs j\"\r\n              , \"user\":'HR:oracle'}\r\n             ) r\r\n     UNNEST r.items[0].resultSet.items as ndoc<\/pre>\n<h5>Notas:<\/h5>\n<ol>\n<li>UPSERT se utiliza para que la consulta se pueda volver a ejecutar sin afectar al resultado en el bucket de Couchbase.<\/li>\n<li>El comando N1QL CURL llama a un endpoint REST en Oracle Rest Data Services, con una consulta que ser\u00e1 procesada por el servidor Oracle.<\/li>\n<li>El CURL N1QL devuelve un documento JSON con el resultado de la consulta en el campo array <em>r.items[0].resultSet.items.<\/em><\/li>\n<li>La consulta N1QL utiliza el comando UNNEST para aplanar el archivo <em>r.items[0].resultSet.items<\/em> devolviendo cada registro de Oracle como un documento JSON independiente.<\/li>\n<li>N1QL UPSERT inserta cada documento en Couchbase <strong>cbhr<\/strong> cubo.<\/li>\n<\/ol>\n<h4>Desnormalizaci\u00f3n<\/h4>\n<p>Esta transformaci\u00f3n combina varias tablas de Oracle en un \u00fanico objeto. En este ejemplo, las tablas Regiones, Pa\u00edses y Ubicaciones tienen una relaci\u00f3n directa padre-hijo, lo que permite a\u00f1adir los campos padre al objeto hijo. El resultado final es un \u00fanico objeto Departamento que incluye su ubicaci\u00f3n, pa\u00eds y regi\u00f3n. Esta transformaci\u00f3n es un proceso de un solo paso.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7163 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png\" alt=\"\" width=\"1020\" height=\"398\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png 1020w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM-300x117.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM-768x300.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM-20x8.png 20w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><\/p>\n<pre class=\"lang:default decode:true\">UPSERT INTO cbhr (KEY doc_key, VALUE ndoc)\r\n  SELECT ndoc.doc_key , ndoc\r\n  FROM CURL( \"&lt;your_database_server_ip&gt;:8080\/ords\/hr\/_\/sql\"\r\n           , { \"request\":\"POST\",\"header\":\"Content-Type: application\/sql\"\r\n             , \"data\": \"SELECT 'department' doc_type, 'department:' ||d.department_id doc_key, \r\n                            d.department_id, d.department_name, d.manager_id , l.* , c.country_name, r.* \r\n                        FROM departments d\r\n                             INNER JOIN locations l ON d.location_id=l.location_id\r\n                             INNER JOIN countries c ON l.country_id = c.country_id\r\n                             INNER JOIN REGIONS r ON c.region_id = r.region_id\"\r\n             ,\"user\":'HR:oracle'}\r\n           ) res\r\n       UNNEST res.items[0].resultSet.items as ndoc<\/pre>\n<h5>Notas:<\/h5>\n<ol>\n<li>UPSERT se utiliza para que la consulta se pueda volver a ejecutar sin afectar al resultado en el bucket de Couchbase.<\/li>\n<li>El comando N1QL CURL llama a un endpoint REST en Oracle Rest Data Services, con una consulta que ser\u00e1 procesada por el servidor Oracle.<\/li>\n<li>El CURL N1QL devuelve un documento JSON con el resultado de la consulta en el campo array <em>r.items[0].resultSet.items.<\/em><\/li>\n<li>La consulta N1QL utiliza el comando UNNEST para aplanar el archivo <em>r.items[0].resultSet.items<\/em> devolviendo cada registro de Oracle como un documento JSON independiente.<\/li>\n<li>N1QL UPSERT inserta cada documento en Couchbase <strong>cbhr<\/strong> cubo.<\/li>\n<\/ol>\n<h4>Desnormalizaci\u00f3n - A\u00f1adir registros hijos como un campo de matriz al objeto padre<\/h4>\n<p>Una de las caracter\u00edsticas clave de una base de datos NoSQL es el uso de arrays. La base de datos NoSQL de Couchbase almacena documentos en formato JSON, en el que un campo puede ser un array. Para este ejercicio, a\u00f1adiremos la tabla JOB_HISTORY a la tabla EMPLOYEES. Esto a\u00f1ade una nueva tabla <strong>historial_trabajo<\/strong> al documento EMPLEADO.<\/p>\n<p>Esta transformaci\u00f3n es una <strong><em>proceso en dos etapas<\/em><\/strong>. El primer paso consiste en migrar los datos de los empleados. El segundo paso fusiona los <strong>empleado<\/strong> que ya est\u00e1n en Couchbase <strong>cbhr<\/strong> con la consulta Oracle de <strong>historial_trabajo<\/strong>.<\/p>\n<h5><strong>El documento principal<\/strong><\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7157\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/Screen-Shot-2019-07-06-at-12.13.30-PM.png\" alt=\"\" width=\"857\" height=\"362\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.13.30-PM.png 1056w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.13.30-PM-300x127.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.13.30-PM-1024x432.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.13.30-PM-768x324.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.13.30-PM-20x8.png 20w\" sizes=\"auto, (max-width: 857px) 100vw, 857px\" \/><\/p>\n<pre class=\"lang:default decode:true\">UPSERT INTO cbhr (key ndoc.doc_key,value ndoc) \r\n  SELECT ndoc.doc_key, ndoc\r\n  FROM CURL(\"https:\/\/192.168.1.117:8080\/ords\/hr\/_\/sql\", \r\n             { \"request\":\"POST\",\"header\":\"Content-Type: application\/sql\"\r\n             , \"data\":\"SELECT 'employee' doc_type, 'employee:' ||e.employee_id doc_key, e.* , j.job_title, d.department_name\r\n                       FROM employees e\r\n                         INNER JOIN jobs j ON e.job_id = j.job_id\r\n                         INNER JOIN departments d ON e.department_id = d.department_id\"\r\n             , \"user\":'HR:oracle'\r\n             }) r\r\n      UNNEST r.items[0].resultSet.items as ndoc<\/pre>\n<h5><strong>Los registros hijos como campo de matriz en el documento padre<\/strong><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7165 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/Screen-Shot-2019-07-06-at-1.08.03-PM.png\" alt=\"\" width=\"998\" height=\"430\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-1.08.03-PM.png 998w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-1.08.03-PM-300x129.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-1.08.03-PM-768x331.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-1.08.03-PM-20x9.png 20w\" sizes=\"auto, (max-width: 998px) 100vw, 998px\" \/><\/h5>\n<pre class=\"lang:default decode:true\">MERGE INTO cbhr e \r\n  USING ( SELECT ndoc.employee_id, ARRAY_AGG(ndoc) all_jobs\r\n          FROM CURL( \"https:\/\/&lt;your_database_server&gt;:8080\/ords\/hr\/_\/sql\"\r\n                   , {\"request\":\"POST\",\"header\":\"Content-Type: application\/sql\"\r\n                     , \"data\": \"SELECT h.employee_id, h.start_date,h.end_date, h.job_id, j.job_title, h.department_id\r\n                                FROM job_history h\r\n                                  INNER JOIN jobs j ON h.job_id=j.job_id\"\r\n                     , \"user\":'HR:oracle'\r\n                     }\r\n                   ) res\r\n              UNNEST res.items[0].resultSet.items as ndoc\r\n           GROUP BY ndoc.employee_id ) source ON KEY 'employee:'||to_string(source.employee_id)\r\nWHEN MATCHED \r\n   THEN UPDATE SET e.job_history = source.all_jobs<\/pre>\n<h5>Notas:<\/h5>\n<ol>\n<li>La consulta N1QL utiliza el comando MERGE para combinar los documentos de la base de datos <strong>cbhr<\/strong> cubo cuyo <strong>tipo_doc<\/strong> es <strong>empleado<\/strong> con el resultado del SELECT de la lectura CURL REST de Oracle <strong>historial_trabajo<\/strong>.<\/li>\n<li>La consulta utiliza el ARRAY_AGG de N1QL para agrupar todos los trabajos por <strong>empleado_id<\/strong>.<\/li>\n<li>El MERGE utiliza <em>empleado:'||to_string(source.employee_id)<\/em> como clave para emparejar los dos conjuntos de resultados.<\/li>\n<\/ol>\n<h3>Limitaciones<\/h3>\n<p>Tenga en cuenta que existe una limitaci\u00f3n en cuanto a la cantidad de datos que N1QL CURL() puede recuperar. Actualmente el tama\u00f1o m\u00e1ximo est\u00e1 fijado en 64MB, que no puede ser modificado. Esto no es mucho si planeas migrar grandes tablas de Oracle. Dicho esto, Oracle tiene soporte para OFFSET y FETCH NEXT, lo que le permitir\u00eda dividir el proceso de migraci\u00f3n en trozos m\u00e1s peque\u00f1os.<\/p>\n<p>Adem\u00e1s, la raz\u00f3n principal de este blog es destacar lo que hay que tener en cuenta a la hora de migrar un esquema relacional a una base de datos de documentos JSON de Couchbase, y c\u00f3mo N1QL puede ayudar a transformar tu esquema relacional directamente en el proceso de migraci\u00f3n.<\/p>\n<p>Si tiene alguna pregunta o comentario, env\u00edeme un mensaje a continuaci\u00f3n.<\/p>","protected":false},"excerpt":{"rendered":"<p>Getting the Couchbase server to run on your PC or Mac involves a few simple steps to download the software and spin up a cluster with all the Couchbase services that you need (https:\/\/docs.couchbase.com\/server\/6.0\/getting-started\/start-here.html). Sample buckets are available with the [&hellip;]<\/p>","protected":false},"author":26326,"featured_media":7163,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1816,1819,1812],"tags":[],"ppma_author":[8919],"class_list":["post-7155","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-server","category-data-modeling","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to use N1QL to migrate Oracle data into Couchbase - The Couchbase Blog<\/title>\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\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to use N1QL to migrate Oracle data into Couchbase\" \/>\n<meta property=\"og:description\" content=\"Getting the Couchbase server to run on your PC or Mac involves a few simple steps to download the software and spin up a cluster with all the Couchbase services that you need (https:\/\/docs.couchbase.com\/server\/6.0\/getting-started\/start-here.html). Sample buckets are available with the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-09T12:08:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:42:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1020\" \/>\n\t<meta property=\"og:image:height\" content=\"398\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Binh Le\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Binh Le\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/\"},\"author\":{\"name\":\"Binh Le\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\"},\"headline\":\"How to use N1QL to migrate Oracle data into Couchbase\",\"datePublished\":\"2019-07-09T12:08:36+00:00\",\"dateModified\":\"2025-06-14T06:42:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/\"},\"wordCount\":1747,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png\",\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Server\",\"Data Modeling\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/\",\"name\":\"How to use N1QL to migrate Oracle data into Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png\",\"datePublished\":\"2019-07-09T12:08:36+00:00\",\"dateModified\":\"2025-06-14T06:42:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png\",\"width\":1020,\"height\":398},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use N1QL to migrate Oracle data into Couchbase\"}]},{\"@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\/f89064928e262c71eb43bee996c48c63\",\"name\":\"Binh Le\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"caption\":\"Binh Le\"},\"description\":\"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/binh-le-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to use N1QL to migrate Oracle data into Couchbase - The Couchbase Blog","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\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/","og_locale":"es_MX","og_type":"article","og_title":"How to use N1QL to migrate Oracle data into Couchbase","og_description":"Getting the Couchbase server to run on your PC or Mac involves a few simple steps to download the software and spin up a cluster with all the Couchbase services that you need (https:\/\/docs.couchbase.com\/server\/6.0\/getting-started\/start-here.html). Sample buckets are available with the [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-07-09T12:08:36+00:00","article_modified_time":"2025-06-14T06:42:49+00:00","og_image":[{"width":1020,"height":398,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png","type":"image\/png"}],"author":"Binh Le","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Binh Le","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/"},"author":{"name":"Binh Le","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63"},"headline":"How to use N1QL to migrate Oracle data into Couchbase","datePublished":"2019-07-09T12:08:36+00:00","dateModified":"2025-06-14T06:42:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/"},"wordCount":1747,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png","articleSection":["Application Design","Best Practices and Tutorials","Couchbase Server","Data Modeling","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/","name":"How to use N1QL to migrate Oracle data into Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png","datePublished":"2019-07-09T12:08:36+00:00","dateModified":"2025-06-14T06:42:49+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/Screen-Shot-2019-07-06-at-12.42.23-PM.png","width":1020,"height":398},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/how-to-use-n1ql-to-migrate-oracle-data-into-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to use N1QL to migrate Oracle data into Couchbase"}]},{"@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\/f89064928e262c71eb43bee996c48c63","name":"Binh Le","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7","url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","caption":"Binh Le"},"description":"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/binh-le-2\/"}]}},"authors":[{"term_id":8919,"user_id":26326,"is_guest":0,"slug":"binh-le-2","display_name":"Binh Le","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","author_category":"","last_name":"Le","first_name":"Binh","job_title":"","user_url":"","description":"Binh Le es director de producto principal del servicio de consultas de Couchbase. Antes de Couchbase, trabaj\u00f3 en Oracle y dirigi\u00f3 el equipo de gesti\u00f3n de productos para Sales Clould Analytics y CRM OnDemand. Binh es licenciado en Inform\u00e1tica por la Universidad de Brighton, Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/7155","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\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=7155"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/7155\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/7163"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=7155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=7155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=7155"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=7155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}