{"id":2446,"date":"2016-12-04T22:01:08","date_gmt":"2016-12-04T22:01:08","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2446"},"modified":"2023-11-22T14:37:02","modified_gmt":"2023-11-22T22:37:02","slug":"elt-processing-with-couchbase-and-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/elt-processing-with-couchbase-and-n1ql\/","title":{"rendered":"Processamento de ELT com Couchbase e N1QL"},"content":{"rendered":"<p>Movimenta\u00e7\u00e3o de dados entre fontes de dados. Essa \u00e9 uma das principais atividades dos projetos de integra\u00e7\u00e3o de dados. Tradicionalmente, as t\u00e9cnicas de movimenta\u00e7\u00e3o de dados fazem parte de <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/database-vs-data-warehouse\/\">Armaz\u00e9m de dados<\/a>BI e an\u00e1lise. Mais recentemente, Big Data, Data Lakes, Hadoop, s\u00e3o participantes frequentes nessa \u00e1rea.<\/p>\n<p>Neste post, discutiremos como a linguagem N1QL do Couchbase pode ser usada para fazer a manipula\u00e7\u00e3o maci\u00e7a dos dados nesse tipo de cen\u00e1rio.<\/p>\n<p>Primeiro, vamos nos lembrar das duas abordagens cl\u00e1ssicas ao fazer a movimenta\u00e7\u00e3o de dados:<\/p>\n<p><strong>ETL<\/strong> (Extrair-Transformar-Carregar). Com esse modelo, os dados s\u00e3o <strong>extra\u00eddo<\/strong> (da fonte de dados original), <strong>transformado<\/strong> (os dados s\u00e3o reformatados para caber no sistema de destino) e <strong>carregado<\/strong> (no armazenamento de dados de destino).<\/p>\n<p><strong>ELT<\/strong> (Extrair- Carregar-Transformar). Com esse modelo, os dados s\u00e3o <strong>extra\u00eddo<\/strong> (da fonte de dados original), <strong>carregado<\/strong> no mesmo formato no sistema de destino. Em seguida, fazemos um <strong>transforma\u00e7\u00e3o<\/strong> no sistema de destino para obter o formato de dados desejado.<\/p>\n<p>Vamos nos concentrar em um <strong>ELT<\/strong> neste exemplo. Vamos fazer uma exporta\u00e7\u00e3o simples de um banco de dados relacional e carregar os dados no Couchbase. Usaremos o Oracle Database como fonte de dados de entrada, com o exemplo cl\u00e1ssico de esquema de RH incorporado, que modela um departamento de Recursos Humanos.<\/p>\n<p>Esse \u00e9 o modelo de dados de origem:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/december\/elt-processing-with-couchbase-and-n1ql\/model_1.jpg\" \/><\/p>\n<p>Na primeira etapa, carregaremos os dados com a mesma estrutura. H\u00e1 uma ferramenta gratuita que voc\u00ea pode usar para realizar essa migra\u00e7\u00e3o inicial <a href=\"https:\/\/github.com\/mahurtado\/oracle2couchbase\">aqui<\/a>. No final, teremos documentos JSON mapeando esse modelo de tabela:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/december\/elt-processing-with-couchbase-and-n1ql\/model_2.jpg\" \/><\/p>\n<p>Por exemplo, um documento de localiza\u00e7\u00e3o ter\u00e1 a seguinte apar\u00eancia:<\/p>\n<pre><code>{\r\n  \"street_address\": \"2017 Shinjuku-ku\",\r\n  \"city\": \"Tokyo\",\r\n  \"state_province\": \"Tokyo Prefecture\",\r\n  \"postal_code\": \"1689\",\r\n  \"type\": \"locations\",\r\n  \"location_id\": 1200,\r\n  \"country_id\": \"JP\"\r\n}\r\n<\/code><\/pre>\n<p>Essa foi uma primeira etapa f\u00e1cil. No entanto, esse mapeamento de tabela para documento costuma ser um projeto ruim no mundo NoSQL. No NoSQL, \u00e9 comum a desnormaliza\u00e7\u00e3o dos dados em favor de um caminho de acesso mais direto, incorporando dados referenciados. O objetivo \u00e9 minimizar as intera\u00e7\u00f5es e jun\u00e7\u00f5es do banco de dados, buscando o melhor desempenho.<\/p>\n<p>Vamos supor que nosso caso de uso seja motivado por um acesso frequente a todo o hist\u00f3rico de trabalho dos funcion\u00e1rios. Decidimos mudar nosso projeto para esse:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/december\/elt-processing-with-couchbase-and-n1ql\/model_3.jpg\" \/><\/p>\n<p>Para locais, estamos unindo em um \u00fanico documento de local os dados referenciados para pa\u00eds e regi\u00e3o.<\/p>\n<p>Para o documento do funcion\u00e1rio, incorporaremos os dados do departamento e incluiremos uma matriz com todo o hist\u00f3rico de trabalho de cada funcion\u00e1rio. Esse suporte de matriz em JSON \u00e9 uma boa melhoria em rela\u00e7\u00e3o \u00e0s refer\u00eancias de chave estrangeira e jun\u00e7\u00f5es no mundo relacional.<\/p>\n<p>Para o documento de trabalho, manteremos a estrutura original da tabela.<\/p>\n<p>Portanto, temos <strong>extra\u00eddo<\/strong> e <strong>carregado<\/strong> os dados, agora vamos <strong>transformar<\/strong> nesse modelo para concluir nosso <strong>ELT<\/strong> exemplo. Como podemos fazer esse trabalho? Chegou a hora do N1QL<\/p>\n<p>N1QL \u00e9 a linguagem semelhante ao SQL inclu\u00edda no Couchbase para acesso e manipula\u00e7\u00e3o de dados. Neste exemplo, usaremos dois buckets: HR, que mapeia o esquema original de RH da Oracle, e HR_DNORM, que manter\u00e1 nosso modelo de documento de destino.<\/p>\n<p>J\u00e1 carregamos nosso esquema de RH. A pr\u00f3xima etapa \u00e9 criar um compartimento chamado HR_DNORM. Em seguida, criaremos um \u00edndice prim\u00e1rio nesse novo bucket:<\/p>\n<pre><code>CREATE PRIMARY INDEX ON HR_DNORM<\/code><\/pre>\n<p>Agora \u00e9 hora de criar os documentos de localiza\u00e7\u00e3o. Esses documentos s\u00e3o compostos de locais originais, documentos de pa\u00eds e regi\u00e3o:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value _v) \r\nSELECT meta().id _k,\r\n{\r\n   \"type\":\"location\",\r\n   \"city\":loc.city,\r\n   \"postal_code\":loc.postal_code, \r\n   \"state_province\":IFNULL(loc.state_province, null), \r\n   \"street_address\":loc.street_address, \r\n   \"country_name\":ct.country_name, \r\n   \"region_name\":rg.region_name\r\n } as _v\r\nFROM HR loc\r\nJOIN HR ct ON KEYS \"countries::\" || loc.country_id\r\nJOIN HR rg ON KEYS \"regions::\" || TO_STRING(ct.region_id)\r\nWHERE loc.type=\"locations\"<\/code><\/pre>\n<p>Alguns aspectos a serem observados:<\/p>\n<ul>\n<li>Estamos usando aqui a proje\u00e7\u00e3o de uma instru\u00e7\u00e3o SELECT para fazer a inser\u00e7\u00e3o. Neste exemplo, os dados originais v\u00eam de um bucket diferente.<\/li>\n<li>JOINs s\u00e3o usados no bucket original para fazer refer\u00eancia a pa\u00edses e regi\u00f5es<\/li>\n<li>Fun\u00e7\u00e3o IFNULL usada para definir explicitamente um valor nulo para o campo state_province<\/li>\n<li>Fun\u00e7\u00e3o TO_STRING aplicada em um campo num\u00e9rico para fazer refer\u00eancia a uma chave<\/li>\n<\/ul>\n<p>Nossa amostra original \u00e9 a seguinte:<\/p>\n<pre><code>{\r\n  \"city\": \"Tokyo\",\r\n  \"country_name\": \"Japan\",\r\n  \"postal_code\": \"1689\",\r\n  \"region_name\": \"Asia\",\r\n  \"state_province\": \"Tokyo Prefecture\",\r\n  \"street_address\": \"2017 Shinjuku-ku\",\r\n  \"type\": \"location\"\r\n}<\/code><\/pre>\n<p>Observe que nos livramos de nossas refer\u00eancias location_id e country_id.<\/p>\n<p>Agora \u00e9 hora de preparar os documentos de nossos funcion\u00e1rios. Faremos isso em v\u00e1rias etapas. A primeira \u00e9 criar os funcion\u00e1rios a partir do bucket de RH original, incluindo informa\u00e7\u00f5es sobre o departamento e o cargo real:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value _v) \r\nSELECT meta().id _k,\r\n{\r\n   \"type\":\"employees\",\r\n   \"employee_id\": emp. employee_id,\r\n   \"first_name\": emp.first_name,\r\n   \"last_name\": emp.last_name,\r\n   \"phone_number\": emp.phone_number,\r\n   \"email\": emp.email,\r\n   \"hire_date\": emp.hire_date,\r\n   \"salary\": emp.salary,\r\n   \"commission_pct\": IFNULL(emp.commission_pct, null),\r\n   \"manager_id\": IFNULL(emp.manager_id, null),\r\n   \"job_id\": emp.job_id,\r\n   \"job_title\": job.job_title,\r\n   \"department\" : \r\n   {\r\n      \"name\" : dpt.department_name,\r\n      \"manager_id\" : dpt.manager_id,\r\n      \"department_id\" : dpt.department_id\r\n   }  \r\n } as _v\r\nFROM HR emp\r\nJOIN HR job ON KEYS \"jobs::\" || emp.job_id \r\nJOIN HR dpt ON KEYS \"departments::\" || TO_STRING(emp.department_id) \r\nWHERE emp.type=\"employees\" RETURNING META().id;<\/code><\/pre>\n<p>Em segundo lugar, usaremos uma constru\u00e7\u00e3o tempor\u00e1ria para criar a matriz de hist\u00f3rico de trabalho:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value job_history) \r\nSELECT \"job_history::\" || TO_STRING(jobh.employee_id) AS _k, \r\n{\r\n\"jobs\" : ARRAY_AGG(\r\n   {\r\n      \"start_date\": jobh.start_date,\r\n      \"end_date\": jobh.end_date,\r\n      \"job_id\": jobh.job_id,\r\n      \"department_id\": jobh.department_id\r\n   } \r\n)\r\n} AS job_history\r\nFROM HR jobh\r\nWHERE jobh.type=\"job_history\"\r\nGROUP BY jobh.employee_id\r\nRETURNING META().id;<\/code><\/pre>\n<p>Agora \u00e9 f\u00e1cil atualizar os documentos de nossos funcion\u00e1rios adicionando uma matriz job_history:<\/p>\n<pre><code>UPDATE HR_DNORM emp\r\nSET job_history=(\r\n   SELECT RAW jobs\r\n   FROM HR_DNORM jobh\r\n   USE KEYS \"job_history::\" || SUBSTR(meta(emp).id, 11)\r\n)[0]\r\nWHERE \r\nemp.type=\"employees\"\r\nRETURNING meta().id<\/code><\/pre>\n<p>Este \u00e9 o aspecto do nosso documento de funcion\u00e1rio:<\/p>\n<pre><code>{\r\n  \"commission_pct\": null,\r\n  \"department\": {\r\n    \"department_id\": 10,\r\n    \"manager_id\": 200,\r\n    \"name\": \"Administration\"\r\n  },\r\n  \"email\": \"JWHALEN\",\r\n  \"employee_id\": 200,\r\n  \"first_name\": \"Jennifer\",\r\n  \"hire_date\": \"2003-09-16T22:00:00Z\",\r\n  \"job_history\": [\r\n    {\r\n      \"department_id\": 80,\r\n      \"end_date\": \"2007-12-31T23:00:00Z\",\r\n      \"job_id\": \"SA_REP\",\r\n      \"start_date\": \"2006-12-31T23:00:00Z\"\r\n    },\r\n    {\r\n      \"department_id\": 90,\r\n      \"end_date\": \"2001-06-16T22:00:00Z\",\r\n      \"job_id\": \"AD_ASST\",\r\n      \"start_date\": \"1995-09-16T22:00:00Z\"\r\n    },\r\n    {\r\n      \"department_id\": 90,\r\n      \"end_date\": \"2006-12-30T23:00:00Z\",\r\n      \"job_id\": \"AC_ACCOUNT\",\r\n      \"start_date\": \"2002-06-30T22:00:00Z\"\r\n    }\r\n  ],\r\n  \"job_id\": \"AD_ASST\",\r\n  \"job_title\": \"Administration Assistant\",\r\n  \"last_name\": \"Whalen\",\r\n  \"manager_id\": 101,\r\n  \"phone_number\": \"515.123.4444\",\r\n  \"salary\": 4400,\r\n  \"type\": \"employees\"\r\n}<\/code><\/pre>\n<p>Observe a matriz job_history de posi\u00e7\u00f5es anteriores.<\/p>\n<p>Podemos excluir agora os documentos tempor\u00e1rios job_history:<\/p>\n<pre><code>DELETE FROM HR_DNORM emp\r\nWHERE meta().id LIKE \"job_history::%\"<\/code><\/pre>\n<p>Como \u00faltima etapa, inserimos os documentos originais dos trabalhos:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value _v) \r\nSELECT meta().id _k, _v\r\nFROM HR _v\r\nWHERE _v.type=\"jobs\"<\/code><\/pre>\n<p>Estamos prontos. Este \u00e9 um exemplo simples, mas mostra o qu\u00e3o poderosa pode ser a manipula\u00e7\u00e3o de dados N1QL. Boa migra\u00e7\u00e3o de dados!<\/p>","protected":false},"excerpt":{"rendered":"<p>Moving data between data sources. This is one of the key activities in data integration projects. Traditionally, techniques around data movement has been part of Data Warehouse, BI and analytics. More recently Big Data, Data Lakes, Hadoop, are frequent players [&hellip;]<\/p>","protected":false},"author":69,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1819],"tags":[1766,1383],"ppma_author":[9041],"class_list":["post-2446","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-data-modeling","tag-data-migration","tag-etl"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ELT processing with Couchbase and N1QL - 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\/pt\/elt-processing-with-couchbase-and-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ELT processing with Couchbase and N1QL\" \/>\n<meta property=\"og:description\" content=\"Moving data between data sources. This is one of the key activities in data integration projects. Traditionally, techniques around data movement has been part of Data Warehouse, BI and analytics. More recently Big Data, Data Lakes, Hadoop, are frequent players [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/elt-processing-with-couchbase-and-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-12-04T22:01:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-22T22:37:02+00:00\" \/>\n<meta name=\"author\" content=\"Manuel Hurtado, Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manuel Hurtado, Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\"},\"author\":{\"name\":\"Manuel Hurtado, Solutions Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237\"},\"headline\":\"ELT processing with Couchbase and N1QL\",\"datePublished\":\"2016-12-04T22:01:08+00:00\",\"dateModified\":\"2023-11-22T22:37:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\"},\"wordCount\":731,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Data Migration\",\"ETL\"],\"articleSection\":[\"Couchbase Server\",\"Data Modeling\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\",\"name\":\"ELT processing with Couchbase and N1QL - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-12-04T22:01:08+00:00\",\"dateModified\":\"2023-11-22T22:37:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ELT processing with Couchbase and N1QL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237\",\"name\":\"Manuel Hurtado, Solutions Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d792e93660734cc10c1f8a5bbc2cf29a\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g\",\"caption\":\"Manuel Hurtado, Solutions Engineer, Couchbase\"},\"description\":\"Manuel is a Couchbase Solutions Engineer, with more than 15 years of experience helping companies to architect their systems, as developer, consultant, trainer and project manager. Happy to learn from the field how people use technology to success.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/manuel-hurtado\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ELT processing with Couchbase and N1QL - 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\/pt\/elt-processing-with-couchbase-and-n1ql\/","og_locale":"pt_BR","og_type":"article","og_title":"ELT processing with Couchbase and N1QL","og_description":"Moving data between data sources. This is one of the key activities in data integration projects. Traditionally, techniques around data movement has been part of Data Warehouse, BI and analytics. More recently Big Data, Data Lakes, Hadoop, are frequent players [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/elt-processing-with-couchbase-and-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-12-04T22:01:08+00:00","article_modified_time":"2023-11-22T22:37:02+00:00","author":"Manuel Hurtado, Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Manuel Hurtado, Solutions Engineer, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/"},"author":{"name":"Manuel Hurtado, Solutions Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237"},"headline":"ELT processing with Couchbase and N1QL","datePublished":"2016-12-04T22:01:08+00:00","dateModified":"2023-11-22T22:37:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/"},"wordCount":731,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Data Migration","ETL"],"articleSection":["Couchbase Server","Data Modeling"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/","name":"ELT processing with Couchbase and N1QL - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-12-04T22:01:08+00:00","dateModified":"2023-11-22T22:37:02+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ELT processing with Couchbase and N1QL"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237","name":"Manuel Hurtado, engenheiro de solu\u00e7\u00f5es, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d792e93660734cc10c1f8a5bbc2cf29a","url":"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g","caption":"Manuel Hurtado, Solutions Engineer, Couchbase"},"description":"Manuel \u00e9 engenheiro de solu\u00e7\u00f5es Couchbase, com mais de 15 anos de experi\u00eancia ajudando empresas a arquitetar seus sistemas, como desenvolvedor, consultor, instrutor e gerente de projetos. Tem prazer em aprender no campo como as pessoas usam a tecnologia para obter sucesso.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/manuel-hurtado\/"}]}},"authors":[{"term_id":9041,"user_id":69,"is_guest":0,"slug":"manuel-hurtado","display_name":"Manuel Hurtado, Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g","first_name":"Manuel","last_name":"Hurtado","user_url":"","author_category":"","description":"Manuel \u00e9 engenheiro de solu\u00e7\u00f5es Couchbase, com mais de 15 anos de experi\u00eancia ajudando empresas a arquitetar seus sistemas, como desenvolvedor, consultor, instrutor e gerente de projetos. Tem prazer em aprender no campo como as pessoas usam a tecnologia para obter sucesso."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/69"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2446"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2446\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2446"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}