{"id":7534,"date":"2019-08-12T22:56:36","date_gmt":"2019-08-13T05:56:36","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7534"},"modified":"2025-06-13T19:27:40","modified_gmt":"2025-06-14T02:27:40","slug":"window-functions-in-couchbase-analytics","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/window-functions-in-couchbase-analytics\/","title":{"rendered":"Fun\u00e7\u00f5es de janela no Couchbase Analytics"},"content":{"rendered":"<p style=\"text-align: center\"><strong>Coautor:  Till Westmann, Diretor S\u00eanior de Engenharia<\/strong><\/p>\n<hr \/>\n<p><span style=\"font-weight: 400\">O <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/?family=server&amp;product=couchbase-server-developer\"><span style=\"font-weight: 400\">bits<\/span><\/a><span style=\"font-weight: 400\"> para o Couchbase 6.5, a pr\u00f3xima vers\u00e3o do Couchbase Server, j\u00e1 est\u00e3o dispon\u00edveis. O servi\u00e7o Analytics, que oferece suporte ao processamento eficiente de consultas paralelas, adicionou suporte \u00e0s fun\u00e7\u00f5es de janela definidas no <a class=\"dd bt mm mn mo mp\" href=\"https:\/\/en.wikipedia.org\/wiki\/Select_(SQL)#Window_function\">padr\u00e3o sql:2003<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Para muitos de n\u00f3s (inclusive para mim), as fun\u00e7\u00f5es de janela s\u00e3o esse recurso m\u00e1gico que raramente usamos. Mas as fun\u00e7\u00f5es de janela tornam as consultas SQL mais concisas, melhorando a legibilidade, o que facilita a manuten\u00e7\u00e3o de consultas para aplicativos do mundo real. As consultas expressas pelas fun\u00e7\u00f5es de janela envolveriam, de outra forma, uni\u00f5es e subconsultas dispendiosas que s\u00e3o dif\u00edceis de otimizar, resultando em consultas de execu\u00e7\u00e3o lenta. <\/span><span style=\"font-weight: 400\">Vou ilustrar esse ponto calculando um total em execu\u00e7\u00e3o, que \u00e9 o exemplo mais pr\u00e1tico para o uso de fun\u00e7\u00f5es de janela. Nesta postagem do blog, calcularei o total em execu\u00e7\u00e3o de duas maneiras: a maneira antiga, usando um INNER JOIN, e as novas Window Functions dispon\u00edveis no Couchbase 6.5.<\/span><\/p>\n<h3><b>O que \u00e9 um total acumulado?<\/b><\/h3>\n<p><span style=\"font-weight: 400\">A<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Running_total\"> <span style=\"font-weight: 400\">Total em execu\u00e7\u00e3o<\/span><\/a><span style=\"font-weight: 400\"> \u00e9 um total que \u00e9 continuamente ajustado para levar em conta os itens \u00e0 medida que s\u00e3o adicionados. Outro termo para isso \u00e9 soma parcial. No exemplo abaixo, o total em execu\u00e7\u00e3o para uma data de transa\u00e7\u00e3o seria o total em execu\u00e7\u00e3o do InvoiceID mais o TransactionAmount atual.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7535 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/image1.png\" alt=\"\" width=\"1830\" height=\"1004\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1.png 1830w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1-300x165.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1-1024x562.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1-768x421.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1-1536x843.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1-1320x724.png 1320w\" sizes=\"auto, (max-width: 1830px) 100vw, 1830px\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Embora eu tenha calculado o RunningTotal acima, observe que os tr\u00eas primeiros campos s\u00e3o os dados de origem e que o RunningTotal precisa ser calculado usando uma consulta SQL.<\/span><\/p>\n<h3><b>Pr\u00e9-requisitos<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Baixar<\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/?family=server&amp;product=couchbase-server-developer\"> <span style=\"font-weight: 400\">Servidor Couchbase 6.5<\/span><\/a><span style=\"font-weight: 400\"> e configurar um bucket do Couchbase para os dados de amostra para executar as consultas nesta postagem do blog.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Crie um bucket do Couchbase chamado \"invoices\" com os dados abaixo.<\/span><\/p>\n<pre class=\"lang:default decode:true\">[\r\n  {\r\n    \"invoices\": {\r\n      \"InvoiceID\": 1,\r\n      \"TransactionDate\": \"2019-08-11\",\r\n      \"TransactionAmount\": 100\r\n    }\r\n  },\r\n  {\r\n    \"invoices\": {\r\n      \"InvoiceID\": 2,\r\n      \"TransactionDate\": \"2019-08-11\",\r\n      \"TransactionAmount\": 200\r\n    }\r\n  },\r\n ...\r\n ...\r\n  {\r\n    \"invoices\": {\r\n      \"InvoiceID\": 3,\r\n      \"TransactionDate\": \"2019-08-11\",\r\n      \"TransactionAmount\": 800\r\n    }\r\n  }\r\n]\r\n<\/pre>\n<p><span style=\"font-weight: 400\">No workbench do Analytics, execute a seguinte instru\u00e7\u00e3o para criar o conjunto de dados<\/span><\/p>\n<pre class=\"lang:default decode:true\">CREATE DATASET invoices on invoices;\r\nCONNECT LINK Local;<\/pre>\n<h3><b>Consulta Inner Join para total de execu\u00e7\u00e3o em um determinado dia<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Para cada InvoiceID, precisamos recuperar o valor da transa\u00e7\u00e3o e todos os valores de transa\u00e7\u00f5es anteriores a ela. Isso \u00e9 feito usando um Inner Join com uma condi\u00e7\u00e3o para obter cada fatura e as anteriores a ela.<\/span><\/p>\n<pre class=\"lang:default decode:true\">SELECT inv1.InvoiceID , inv1.TransactionDate, inv1.TransactionAmount, SUM(inv2.TransactionAmount) AS RunningTotal\r\nFROM invoices inv1 JOIN invoices inv2 ON inv1.InvoiceID &gt;= inv2.InvoiceID\r\nWHERE inv1.TransactionDate = \"2019-08-11\"\r\nGROUP BY inv1.InvoiceID, inv1.TransactionDate, inv1.TransactionAmount\r\nORDER BY inv1.InvoiceID<\/pre>\n<p><span style=\"font-weight: 400\">JOINs e NoSQL nem sempre se deram bem juntos. De fato, a sabedoria convencional \u00e9 que os dados no mundo NoSQL s\u00e3o desnormalizados para evitar JOINs. Mas o Couchbase Analytics foi criado para explora\u00e7\u00e3o de dados e an\u00e1lise ad-hoc que inclui jun\u00e7\u00f5es e agrega\u00e7\u00f5es complexas. O mecanismo de consulta do Analytics pode processar JOINs que n\u00e3o s\u00e3o suportados por outros fornecedores de NoSQL -\u00a0<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\"> \u00a0 \u00a0 <\/span><span style=\"font-weight: 400\">Cassandra - <\/span><a href=\"https:\/\/cassandra.apache.org\/doc\/latest\/cql\/index.html\"><span style=\"font-weight: 400\">sem suporte a JOIN<\/span><span style=\"font-weight: 400\"> em CQL<\/span><\/a><\/li>\n<li><span style=\"font-weight: 400\"> \u00a0 \u00a0 <\/span><span style=\"font-weight: 400\">MongoDB -<\/span><a href=\"https:\/\/docs.mongodb.com\/manual\/reference\/operator\/aggregation\/lookup\/\"> <span style=\"font-weight: 400\">n\u00e3o \u00e9 poss\u00edvel unir cole\u00e7\u00f5es fragmentadas<\/span><\/a><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Caso voc\u00ea esteja se perguntando como o Couchbase Analytics pode unir dados JSON, recomendo que voc\u00ea se aprofunde neste<\/span><a href=\"https:\/\/www.youtube.com\/watch?v=1dN11TUj58c\"> <span style=\"font-weight: 400\">apresenta\u00e7\u00e3o de v\u00eddeo<\/span><\/a><span style=\"font-weight: 400\"> com o professor Mike Carey, <\/span><span style=\"font-weight: 400\">Arquiteto-chefe de consultoria para<\/span><span style=\"font-weight: 400\"> Couchbase.<\/span><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<h3><b>Consulta de fun\u00e7\u00e3o de janela para total de execu\u00e7\u00e3o em um determinado dia<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Se voc\u00ea n\u00e3o estiver familiarizado com as fun\u00e7\u00f5es de janela, recomendo a leitura de<\/span><a href=\"https:\/\/www.postgresql.org\/docs\/11\/tutorial-window.html\"> <span style=\"font-weight: 400\">Documenta\u00e7\u00e3o do PostgresSQL<\/span><\/a><span style=\"font-weight: 400\"> que oferece uma \u00f3tima introdu\u00e7\u00e3o:\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\"A <\/span><i><span style=\"font-weight: 400\">fun\u00e7\u00e3o de janela<\/span><\/i><span style=\"font-weight: 400\"> executa um c\u00e1lculo em um conjunto de linhas da tabela que est\u00e3o de alguma forma relacionadas \u00e0 linha atual. Isso \u00e9 compar\u00e1vel ao tipo de c\u00e1lculo que pode ser feito com uma fun\u00e7\u00e3o de agrega\u00e7\u00e3o. Mas, diferentemente das fun\u00e7\u00f5es agregadas comuns, o uso de uma fun\u00e7\u00e3o de janela n\u00e3o faz com que as linhas sejam agrupadas em uma \u00fanica linha de sa\u00edda - as linhas mant\u00eam suas identidades separadas. Nos bastidores, a fun\u00e7\u00e3o de janela \u00e9 capaz de acessar mais do que apenas a linha atual do resultado da consulta.\"<\/span><\/p>\n<p><span style=\"font-weight: 400\">Esta \u00e9 a apar\u00eancia da consulta real<\/span><\/p>\n<pre class=\"lang:default decode:true\">SELECT InvoiceID, TransactionDate, TransactionAmount, SUM(TransactionAmount) OVER (ORDER BY InvoiceID) as RunningTotal\r\nFROM invoices\r\nWHERE TransactionDate = \"2019-08-11\"\r\nORDER BY InvoiceID\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Al\u00e9m da simplicidade e da concis\u00e3o, h\u00e1 algumas coisas interessantes sobre a declara\u00e7\u00e3o acima -<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"> \u00a0 \u00a0 <\/span><span style=\"font-weight: 400\">H\u00e1 uma fun\u00e7\u00e3o de agrega\u00e7\u00e3o, mas n\u00e3o h\u00e1 cl\u00e1usula group by. Normalmente, as fun\u00e7\u00f5es de agrega\u00e7\u00e3o exigem uma cl\u00e1usula group by, mas como estamos usando a cl\u00e1usula OVER, SUM \u00e9 considerada uma fun\u00e7\u00e3o de janela.<\/span><\/li>\n<li><span style=\"font-weight: 400\"> \u00a0 \u00a0 <\/span><span style=\"font-weight: 400\">A cl\u00e1usula OVER recupera um conjunto espec\u00edfico de linhas, em rela\u00e7\u00e3o \u00e0 linha atual, e executa uma opera\u00e7\u00e3o em um campo espec\u00edfico.<\/span><\/li>\n<li><span style=\"font-weight: 400\"> \u00a0 \u00a0 <\/span><span style=\"font-weight: 400\">ORDER BY define a ordem l\u00f3gica em que a fun\u00e7\u00e3o de janela \u00e9 avaliada.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Observa\u00e7\u00e3o:<\/span><span style=\"font-weight: 400\"> O Couchbase oferece suporte a fun\u00e7\u00f5es de janela para os servi\u00e7os de consulta e an\u00e1lise, e a mesma consulta pode ser executada nos workbenches de consulta e an\u00e1lise. Para executar no servi\u00e7o de consulta, os seguintes \u00edndices precisam ser criados<\/span><\/p>\n<pre class=\"lang:default decode:true\">CREATE PRIMARY INDEX ON invoices;\r\nCREATE INDEX invoices_id ON invoices(InvoiceID);<\/pre>\n<p><span style=\"font-weight: 400\">O objetivo desta postagem do blog foi apresentar as fun\u00e7\u00f5es de janela no Couchbase Analytics. As fun\u00e7\u00f5es de janela N\u00c3O s\u00e3o novas no SQL, elas fazem parte do padr\u00e3o SQL e est\u00e3o dispon\u00edveis em todos os principais bancos de dados relacionais e ferramentas de Big Data, como Hive e Spark. Com a vers\u00e3o 6.5, o Couchbase est\u00e1 trazendo essas fun\u00e7\u00f5es para os bancos de dados de documentos. Se voc\u00ea quiser experimentar isso em primeira m\u00e3o, por favor <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\"><span style=\"font-weight: 400\">Fa\u00e7a o download dos bits<\/span><\/a><span style=\"font-weight: 400\"> e interaja conosco em<\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/c\/analytics\/\"> <span style=\"font-weight: 400\">f\u00f3runs<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<h3>Recursos<b><\/b><\/h3>\n<p><a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/introduction\/whats-new.html\"><span style=\"font-weight: 400\">Couchbase Server 6.5 O que h\u00e1 de novo<\/span><\/a><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/tag\/6-5\/\"><b>Todos os blogs 6.5<\/b><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Co-author:\u00a0 Till Westmann,\u00a0 Senior Director, Engineering The bits for Couchbase 6.5, the upcoming release of Couchbase Server, are now available. The Analytics service, which supports efficient parallel query processing, has added support for support for window functions defined in the [&hellip;]<\/p>","protected":false},"author":559,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2294,1821,1816,1812],"tags":[2378,1886,1309,1725],"ppma_author":[9052],"class_list":["post-7534","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","category-couchbase-architecture","category-couchbase-server","category-n1ql-query","tag-6-5","tag-cassandra","tag-mongodb","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Window functions in Couchbase Analytics - 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\/window-functions-in-couchbase-analytics\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Window functions in Couchbase Analytics\" \/>\n<meta property=\"og:description\" content=\"Co-author:\u00a0 Till Westmann,\u00a0 Senior Director, Engineering The bits for Couchbase 6.5, the upcoming release of Couchbase Server, are now available. The Analytics service, which supports efficient parallel query processing, has added support for support for window functions defined in the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/window-functions-in-couchbase-analytics\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-13T05:56:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:27:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1830\" \/>\n\t<meta property=\"og:image:height\" content=\"1004\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sachin Smotra, Director Product Management, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@smotras\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sachin Smotra, Director Product Management, 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\/window-functions-in-couchbase-analytics\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/\"},\"author\":{\"name\":\"Sachin Smotra, Director Product Management, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b0afdfaea6775eaf75096b65e7791f9a\"},\"headline\":\"Window functions in Couchbase Analytics\",\"datePublished\":\"2019-08-13T05:56:36+00:00\",\"dateModified\":\"2025-06-14T02:27:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/\"},\"wordCount\":771,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"6.5\",\"cassandra\",\"mongodb\",\"NoSQL Database\"],\"articleSection\":[\"Couchbase Analytics\",\"Couchbase Architecture\",\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/\",\"name\":\"Window functions in Couchbase Analytics - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2019-08-13T05:56:36+00:00\",\"dateModified\":\"2025-06-14T02:27:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#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\/window-functions-in-couchbase-analytics\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Window functions in Couchbase Analytics\"}]},{\"@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\/b0afdfaea6775eaf75096b65e7791f9a\",\"name\":\"Sachin Smotra, Director Product Management, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e0fd86aac479bbde276340e2945bbd5c\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/351d2ab52ac22b2cfdfc83ff4a2dc0b377d8316ecb298656b8c1a5f9e70a141b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/351d2ab52ac22b2cfdfc83ff4a2dc0b377d8316ecb298656b8c1a5f9e70a141b?s=96&d=mm&r=g\",\"caption\":\"Sachin Smotra, Director Product Management, Couchbase\"},\"description\":\"Sachin Smotra\u2019s career spans more than 15 years building software products across various domains including Java Enterprise software, DRM Solutions for mobile games and web conferencing. As Director Product Management at Couchbase, he is a hands-on product leader responsible for Couchbase Mobile, IOT and Analytics product lines including evangelizing the product strategy and vision with customers, partners, developers and analysts. Before joining Couchbase, Sachin was a Senior Manager, Product Management, at Cisco WebEx where he led the product team responsible for transforming the end to end Customer Experience across the WebEx product lifecycle - consideration, purchase, usage and renewals. Prior to his time at Cisco, Sachin worked at different startups in a multitude of roles across engineering, architecture, product management and alliances.\",\"sameAs\":[\"https:\/\/x.com\/smotras\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/ssmotra\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Window functions in Couchbase Analytics - 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\/window-functions-in-couchbase-analytics\/","og_locale":"pt_BR","og_type":"article","og_title":"Window functions in Couchbase Analytics","og_description":"Co-author:\u00a0 Till Westmann,\u00a0 Senior Director, Engineering The bits for Couchbase 6.5, the upcoming release of Couchbase Server, are now available. The Analytics service, which supports efficient parallel query processing, has added support for support for window functions defined in the [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/window-functions-in-couchbase-analytics\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-08-13T05:56:36+00:00","article_modified_time":"2025-06-14T02:27:40+00:00","og_image":[{"width":1830,"height":1004,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/image1.png","type":"image\/png"}],"author":"Sachin Smotra, Director Product Management, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@smotras","twitter_misc":{"Written by":"Sachin Smotra, Director Product Management, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/"},"author":{"name":"Sachin Smotra, Director Product Management, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b0afdfaea6775eaf75096b65e7791f9a"},"headline":"Window functions in Couchbase Analytics","datePublished":"2019-08-13T05:56:36+00:00","dateModified":"2025-06-14T02:27:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/"},"wordCount":771,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["6.5","cassandra","mongodb","NoSQL Database"],"articleSection":["Couchbase Analytics","Couchbase Architecture","Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/","url":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/","name":"Window functions in Couchbase Analytics - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2019-08-13T05:56:36+00:00","dateModified":"2025-06-14T02:27:40+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/window-functions-in-couchbase-analytics\/#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\/window-functions-in-couchbase-analytics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Window functions in Couchbase Analytics"}]},{"@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\/b0afdfaea6775eaf75096b65e7791f9a","name":"Sachin Smotra, diretor de gerenciamento de produtos, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e0fd86aac479bbde276340e2945bbd5c","url":"https:\/\/secure.gravatar.com\/avatar\/351d2ab52ac22b2cfdfc83ff4a2dc0b377d8316ecb298656b8c1a5f9e70a141b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/351d2ab52ac22b2cfdfc83ff4a2dc0b377d8316ecb298656b8c1a5f9e70a141b?s=96&d=mm&r=g","caption":"Sachin Smotra, Director Product Management, Couchbase"},"description":"Sachin Smotra\u2019s career spans more than 15 years building software products across various domains including Java Enterprise software, DRM Solutions for mobile games and web conferencing. As Director Product Management at Couchbase, he is a hands-on product leader responsible for Couchbase Mobile, IOT and Analytics product lines including evangelizing the product strategy and vision with customers, partners, developers and analysts. Before joining Couchbase, Sachin was a Senior Manager, Product Management, at Cisco WebEx where he led the product team responsible for transforming the end to end Customer Experience across the WebEx product lifecycle - consideration, purchase, usage and renewals. Prior to his time at Cisco, Sachin worked at different startups in a multitude of roles across engineering, architecture, product management and alliances.","sameAs":["https:\/\/x.com\/smotras"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/ssmotra\/"}]}},"authors":[{"term_id":9052,"user_id":559,"is_guest":0,"slug":"ssmotra","display_name":"Sachin Smotra, Director Product Management, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/351d2ab52ac22b2cfdfc83ff4a2dc0b377d8316ecb298656b8c1a5f9e70a141b?s=96&d=mm&r=g","author_category":"","last_name":"Smotra, Director Product Management, Couchbase","first_name":"Sachin","job_title":"","user_url":"","description":"A carreira de Sachin Smotra abrange mais de 15 anos de desenvolvimento de produtos de software em v\u00e1rios dom\u00ednios, incluindo software Java Enterprise, solu\u00e7\u00f5es DRM para jogos m\u00f3veis e confer\u00eancias na Web. Como diretor de gerenciamento de produtos da Couchbase, ele \u00e9 um l\u00edder de produto pr\u00e1tico respons\u00e1vel pelas linhas de produtos Couchbase Mobile, IOT e Analytics, incluindo a divulga\u00e7\u00e3o da estrat\u00e9gia e da vis\u00e3o do produto com clientes, parceiros, desenvolvedores e analistas.\r\n\r\nAntes de ingressar na Couchbase, Sachin foi gerente s\u00eanior de gerenciamento de produtos na Cisco WebEx, onde liderou a equipe de produtos respons\u00e1vel por transformar a experi\u00eancia do cliente de ponta a ponta em todo o ciclo de vida do produto WebEx - considera\u00e7\u00e3o, compra, uso e renova\u00e7\u00e3o. Antes de trabalhar na Cisco, Sachin trabalhou em diferentes startups em uma s\u00e9rie de fun\u00e7\u00f5es nas \u00e1reas de engenharia, arquitetura, gerenciamento de produtos e alian\u00e7as."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7534","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\/559"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=7534"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7534\/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=7534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=7534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=7534"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=7534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}