{"id":6055,"date":"2018-12-01T22:08:55","date_gmt":"2018-12-02T06:08:55","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6055"},"modified":"2025-06-13T18:44:58","modified_gmt":"2025-06-14T01:44:58","slug":"json-to-insights-fast-and-easy","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/json-to-insights-fast-and-easy\/","title":{"rendered":"JSON para Insights: R\u00e1pido e f\u00e1cil"},"content":{"rendered":"<p>Coautor:  Sitaram Vemulapalli, Engenheiro Principal, Couchbase R&amp;D.<\/p>\n<blockquote><p><span style=\"font-weight: 400;\">\"A resposta, meu amigo, est\u00e1 escondida em JSON\" - Bob Dylan<\/span><\/p><\/blockquote>\n<p><span style=\"font-weight: 400;\">H\u00e1 muitos <\/span><a href=\"https:\/\/catalog.data.gov\/dataset?res_format=JSON\"><span style=\"font-weight: 400;\">p\u00fablico<\/span><\/a><span style=\"font-weight: 400;\"> conjuntos de dados JSON e, em seguida, \u00e9\u00a0<\/span><a href=\"https:\/\/github.com\/jdorfman\/awesome-json-datasets\"><span style=\"font-weight: 400;\">incr\u00edvel<\/span><\/a><span style=\"font-weight: 400;\"> Conjuntos de dados JSON. Todas as empresas, inclusive a sua, armazenam muitos dados em JSON, resultado de pesquisas, campanhas e f\u00f3runs. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">H\u00e1 muitas maneiras de obter o JSON. Voc\u00ea pode escrever um programa Python para cada relat\u00f3rio, visualizando o que deseja fazer.  Ou, voc\u00ea pode usar <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/index.html\"><span style=\"font-weight: 400;\">N1QL<\/span><\/a><span style=\"font-weight: 400;\"> (SQL para JSON) para <\/span><a href=\"https:\/\/www.slideshare.net\/LukasEder1\/how-modern-sql-databases-come-up-with-algorithms-that-you-would-have-never-dreamed-of?qid=8d7fc709-07f7-4af5-848a-a576af4b0ea0&amp;v=&amp;b=&amp;from_search=2\"><span style=\"font-weight: 400;\">gerar o algoritmo certo para voc\u00ea<\/span><\/a><span style=\"font-weight: 400;\">\u00a0para analisar dados JSON.<\/span><span style=\"font-weight: 400;\">\u00a0Neste artigo, mostramos como usar o N1QL para extrair insights rapidamente.  Tamb\u00e9m usamos dois recursos que ser\u00e3o lan\u00e7ados na pr\u00f3xima vers\u00e3o: Common Table Expression (CTE) e Window Functions.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Objetivo: usar o conjunto de dados JSON p\u00fablico para as pontua\u00e7\u00f5es de golfe do US Open para criar uma tabela de classifica\u00e7\u00e3o simples, ranking, etc.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tr\u00eas coisas que voc\u00ea far\u00e1 como parte disso:<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400;\">Ingerir os dados no Couchbase facilmente.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Comece a obter o valor desses dados JSON imediatamente.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Molde o JSON para gerar relat\u00f3rios \u00fateis usando novos recursos rapidamente.<\/span><\/li>\n<\/ol>\n<p>Dados de origem:\u00a0<a href=\"https:\/\/github.com\/jackschultz\/usopen\">https:\/\/github.com\/jackschultz\/usopen<\/a><\/p>\n<p>As consultas desta postagem tamb\u00e9m est\u00e3o dispon\u00edveis em:\u00a0<a href=\"https:\/\/github.com\/keshavmr\/usopen-golf-queries\">https:\/\/github.com\/keshavmr\/usopen-golf-queries<\/a><\/p>\n<p><b>Estrutura de reposit\u00f3rio de dados:<\/b><span style=\"font-weight: 400;\"> Este reposit\u00f3rio do GitHub <\/span><a href=\"https:\/\/github.com\/jackschultz\/usopen\"><span style=\"font-weight: 400;\">https:\/\/github.com\/jackschultz\/usopen<\/span><\/a><span style=\"font-weight: 400;\"> cont\u00e9m dados do US Open de golfe de 2018.  Para cada buraco, \u00e9 um documento separado para cada dia.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6058\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/12\/Screen-Shot-2018-11-25-at-3.29.59-PM-185x300.png\" alt=\"\" width=\"326\" height=\"529\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-25-at-3.29.59-PM-185x300.png 185w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-25-at-3.29.59-PM-632x1024.png 632w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-25-at-3.29.59-PM-300x486.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-25-at-3.29.59-PM-12x20.png 12w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-25-at-3.29.59-PM.png 642w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Cada documento tem essa estrutura.  Este \u00e9 o documento do buraco 1 no dia 1.  O Ps arquivado tem a lista de jogadores, cada um com um ID exclusivo. \u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-6063\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/12\/Screen-Shot-2018-11-23-at-11.37.48-PM-187x300.png\" alt=\"\" width=\"187\" height=\"300\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-23-at-11.37.48-PM-187x300.png 187w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-23-at-11.37.48-PM-300x483.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-23-at-11.37.48-PM-12x20.png 12w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-23-at-11.37.48-PM.png 572w\" sizes=\"auto, (max-width: 187px) 100vw, 187px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">As estat\u00edsticas de jogo de cada jogador s\u00e3o apresentadas a seguir, tacada por tacada.   Os jogadores s\u00e3o combinados com as pontua\u00e7\u00f5es usando o ID exclusivo do campo para o jogador.\u00a0\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6075\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/12\/Screen-Shot-2018-12-01-at-9.37.40-PM-236x300.png\" alt=\"\" width=\"349\" height=\"444\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-01-at-9.37.40-PM-236x300.png 236w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-01-at-9.37.40-PM-806x1024.png 806w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-01-at-9.37.40-PM-768x976.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-01-at-9.37.40-PM-300x381.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-01-at-9.37.40-PM-16x20.png 16w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-01-at-9.37.40-PM.png 812w\" sizes=\"auto, (max-width: 349px) 100vw, 349px\" \/><\/p>\n<p><b>Comece a obter insights:<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Antes de come\u00e7ar a consultar, crie um \u00edndice prim\u00e1rio no bucket.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CREATE PRIMARY INDEX ON usopen;<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Tarefa 1:<\/strong> \u00a0\u00a0Crie um relat\u00f3rio das pontua\u00e7\u00f5es dos jogadores por rodada e o total final.<\/span><\/p>\n<p>Depois de brincar com o JSON de baixo para cima, chegamos a esta consulta. A explica\u00e7\u00e3o est\u00e1 ap\u00f3s a consulta.<\/p>\n<pre class=\"\">WITH d AS (\r\n  SELECT\r\n    pl.hnum AS holedn,\r\n    pl.ps.Nat AS country,\r\n    (pl.ps.FN || \" \" || pl.ps.LN) AS name,\r\n    pl.ps.ID AS ID,\r\n    array_length(hps.Sks) AS score,\r\n    hpl.hole AS `hole`,\r\n    hpl.day AS `day`\r\n  FROM\r\n    (\r\n      SELECT\r\n        meta(usopen).id AS hnum,\r\n        ps\r\n      FROM\r\n        usopen USE keys \"holes:1:1\" unnest Ps AS ps\r\n    ) pl\r\n    INNER JOIN (\r\n      SELECT\r\n        TONUMBER(split(meta(usopen).id, \":\") [1]) AS `hole`,\r\n        TONUMBER(split(meta(usopen).id, \":\") [2]) AS `day`,\r\n        hps\r\n      FROM\r\n        usopen unnest Rs AS rs UNNEST rs.Hs AS hs UNNEST hs.HPs AS hps\r\n    ) hpl ON (pl.ps.ID = hps.ID)\r\n)\r\nSELECT\r\n  d.name,\r\n  SUM(\r\n    CASE WHEN d.day = 1 THEN d.score ELSE 0 END\r\n  ) R1,\r\n  SUM(\r\n    CASE WHEN d.day = 2 THEN d.score ELSE 0 END\r\n  ) R2,\r\n  SUM(\r\n    CASE WHEN d.day = 3 THEN d.score ELSE 0 END\r\n  ) R3,\r\n  SUM(\r\n    CASE WHEN d.day = 4 THEN d.score ELSE 0 END\r\n  ) R4,\r\n  SUM(d.score) T\r\nFROM\r\n  d\r\nGROUP BY\r\n  d.name\r\nORDER BY\r\n  d.name<\/pre>\n<p><span style=\"font-weight: 400;\">Resultados tabulares (em formato tabular, do workbench de consulta do Couchbase)<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6064\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/12\/Screen-Shot-2018-11-28-at-3.38.36-PM-300x190.png\" alt=\"\" width=\"630\" height=\"399\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-28-at-3.38.36-PM-300x190.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-28-at-3.38.36-PM-768x488.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-28-at-3.38.36-PM-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-28-at-3.38.36-PM.png 838w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Vamos examinar a consulta bloco por bloco.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Observe a cl\u00e1usula WITH d.  A instru\u00e7\u00e3o desvincula o JSON dos dados PER-day-PER-hole-shot-by-shot para valores escalares simples.<\/span><\/p>\n<pre class=\"theme:github tab-size:2 whitespace-before:2 whitespace-after:2 lang:js decode:true\">{\r\n   \"d\": {\r\n      \"ID\": \"37189\",\r\n      \"country\": \"USA\",\r\n      \"day\": 1,\r\n      \"hole\": 10,\r\n      \"holedn\": \"holes:1:1\",\r\n      \"name\": \"Harold Varner\",\r\n      \"score\": 6\r\n    }\r\n\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">Holedn \u00e9 a chave do documento - n\u00famero do dia do furo<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pa\u00eds \u00e9 a nacionalidade do jogador<\/span><\/p>\n<p><span style=\"font-weight: 400;\">ID \u00e9 o ID exclusivo do jogador.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O buraco e o dia s\u00e3o \u00f3bvios e a pontua\u00e7\u00e3o \u00e9 a pontua\u00e7\u00e3o do jogador para aquele buraco.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Na cl\u00e1usula FROM da instru\u00e7\u00e3o SELECT, pl \u00e9 a lista completa de jogadores retirada do documento para o primeiro dia, primeiro buraco (buracos:1:1).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Rs \u00e9 o resultado dos jogadores, tacada por tacada, buraco por buraco.  Primeiro, aninhamos essa matriz algumas vezes para projetar os detalhes de cada buraco e a pontua\u00e7\u00e3o desse buraco, determinada por array_length(hps.Sks).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Quando tivermos a pontua\u00e7\u00e3o buraco a buraco, \u00e9 f\u00e1cil escrever a consulta final para agregar por jogador e por dia.<\/span><\/p>\n<pre class=\"theme:github wrap:true scroll:true tab-size:2 whitespace-before:2 whitespace-after:02 lang:tsql decode:true\">select d.name,\r\n       sum(case when d.day = 1 then d.score else 0 end) R1,\r\n       sum(case when d.day = 2 then d.score else 0 end) R2,\r\n       sum(case when d.day = 3 then d.score else 0 end) R3,\r\n       sum(case when d.day = 4 then d.score else 0 end) R4,\r\n       sum(d.score) T\r\nfrom d   \r\ngroup by d.name \r\norder by d.name\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">**A cl\u00e1usula WITH \u00e9 o recurso de express\u00e3o de tabela comum (CTE) na pr\u00f3xima vers\u00e3o do Mad-Hatter. A maneira antiga de fazer isso no Couchbase 5.5 ou inferior \u00e9 usar a cl\u00e1usula LET.  Publique a pergunta no f\u00f3rum do Couchbase se precisar de ajuda aqui).<\/span><\/p>\n<h5><span style=\"font-weight: 400;\"><strong>Tarefa 2:<\/strong> Agora, crie a tabela de classifica\u00e7\u00e3o completa e adicione a tag <\/span><a href=\"https:\/\/www.pga.com\/events\/usopen\/us-open-cut-rule-explained-who-makes-weekend\"><span style=\"font-weight: 400;\">CORTE<\/span><\/a><span style=\"font-weight: 400;\"> informa\u00e7\u00f5es.  Os golfistas que foram cortados n\u00e3o jogar\u00e3o a terceira ou a quarta rodada. Usamos essas informa\u00e7\u00f5es para determinar os jogadores que foram cortados.<\/span><\/h5>\n<p><span style=\"font-weight: 400;\"><strong>Consulta 2.<\/strong> \u00a0Pegue a consulta anterior e nomeie-a como uma tabela comum dx e, em seguida, adicione a seguinte express\u00e3o para determinar esse corte.<\/span><\/p>\n<pre class=\"theme:github wrap:true scroll:true tab-size:2 whitespace-before:2 whitespace-after:2 lang:tsql decode:true\">(\r\n\t\tCASE \r\n\t\t\tWHEN (\r\n\t\t\t\t\td2.R1 = 0\r\n\t\t\t\t\tOR d2.R2 = 0\r\n\t\t\t\t\tOR d2.R3 = 0\r\n\t\t\t\t\tOR d2.R4 = 0\r\n\t\t\t\t\t)\r\n\t\t\t\tTHEN \"CUT\"\r\n\t\t\tELSE MISSING\r\n\t\t\tEND\r\n\t\t) AS CUT<\/pre>\n<p><span style=\"font-weight: 400;\">Aqui est\u00e1 a consulta completa:<\/span><\/p>\n<pre class=\"\">WITH dy AS (\r\n  SELECT\r\n    pl.hnum AS holedn,\r\n    pl.ps.Nat AS country,(pl.ps.FN || \" \" || pl.ps.LN) AS name,\r\n    pl.ps.ID AS ID,\r\n    array_length(hps.Sks) AS score,\r\n    hpl.hole AS `hole`,\r\n    hpl.day AS `day`\r\n  FROM\r\n    (\r\n      SELECT\r\n        meta(usopen).id AS hnum,\r\n        ps\r\n      FROM\r\n        usopen USE keys \"holes:1:1\" unnest Ps AS ps\r\n    ) pl\r\n    INNER JOIN (\r\n      SELECT\r\n        TONUMBER(split(meta(usopen).id, \":\") [1]) AS `hole`,\r\n        TONUMBER(split(meta(usopen).id, \":\") [2]) AS `day`,\r\n        hps\r\n      FROM\r\n        usopen unnest Rs AS rs unnest rs.Hs AS hs unnest hs.HPs AS hps\r\n    ) hpl ON (pl.ps.ID = hps.ID)\r\n),\r\ndx AS (\r\n  SELECT\r\n    d.name,\r\n    sum(\r\n      CASE WHEN d.day = 1 THEN d.score ELSE 0 END\r\n    ) R1,\r\n    sum(\r\n      CASE WHEN d.day = 2 THEN d.score ELSE 0 END\r\n    ) R2,\r\n    sum(\r\n      CASE WHEN d.day = 3 THEN d.score ELSE 0 END\r\n    ) R3,\r\n    sum(\r\n      CASE WHEN d.day = 4 THEN d.score ELSE 0 END\r\n    ) R4,\r\n    sum(d.score) T\r\n  FROM\r\n    dy AS d\r\n  GROUP BY\r\n    d.name\r\n  ORDER BY\r\n    d.name\r\n)\r\nSELECT\r\n  d2.name,\r\n  d2.R1,\r\n  d2.R2,\r\n  d2.R3,\r\n  d2.R4,\r\n  d2.T,(\r\n    CASE WHEN (\r\n      d2.R1 = 0\r\n      OR d2.R2 = 0\r\n      OR d2.R3 = 0\r\n      OR d2.R4 = 0\r\n    ) THEN \"CUT\" ELSE MISSING END\r\n  ) AS CUT\r\nFROM\r\n  dx AS d2\r\nORDER BY\r\n  CUT ASC,\r\n  d2.T ASC<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6065\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/12\/Screen-Shot-2018-11-29-at-10.47.56-PM-300x202.png\" alt=\"\" width=\"616\" height=\"415\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-29-at-10.47.56-PM-300x202.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-29-at-10.47.56-PM-768x517.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-29-at-10.47.56-PM-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-29-at-10.47.56-PM.png 888w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/p>\n<h5><strong>Tarefa 3: Determinar os vencedores.<\/strong><\/h5>\n<p><span style=\"font-weight: 400;\">Precisamos classificar os jogadores com base na pontua\u00e7\u00e3o total para determinar quem venceu o torneio.  As classifica\u00e7\u00f5es ser\u00e3o ignoradas se houver empates nas pontua\u00e7\u00f5es. Fazendo isso em SQL <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/on-par-with-window-functions-in-n1ql\/\"><span style=\"font-weight: 400;\">sem fun\u00e7\u00f5es de janela \u00e9 caro<\/span><\/a><span style=\"font-weight: 400;\">. Aqui, escrevemos a consulta usando a fun\u00e7\u00e3o de janela RANK().  As fun\u00e7\u00f5es de janela s\u00e3o um recurso do N1QL na pr\u00f3xima vers\u00e3o (Mad-Hatter)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Consulta 3: \u00a0<\/span><\/p>\n<pre class=\"\">WITH dy\r\nAS (\r\n\tSELECT pl.hnum AS holedn\r\n\t\t,pl.ps.Nat AS country\r\n\t\t,(pl.ps.FN || \" \" || pl.ps.LN) AS name\r\n\t\t,pl.ps.ID AS ID\r\n\t\t,array_length(hps.Sks) AS score\r\n\t\t,hpl.hole AS `hole`\r\n\t\t,hpl.day AS `day`\r\n\tFROM (\r\n\t\tSELECT meta(usopen).id AS hnum\r\n\t\t\t,ps\r\n\t\tFROM usopen USE keys \"holes:1:1\" unnest Ps AS ps\r\n\t\t) pl\r\n\tINNER JOIN (\r\n\t\tSELECT TONUMBER(split(meta(usopen).id, \":\") [1]) AS `hole`\r\n\t\t\t,TONUMBER(split(meta(usopen).id, \":\") [2]) AS `day`\r\n\t\t\t,hps\r\n\t\tFROM usopen unnest Rs AS rs unnest rs.Hs AS hs unnest hs.HPs AS hps\r\n\t\t) hpl ON (pl.ps.ID = hps.ID)\r\n\t)\r\n\t,dx\r\nAS (\r\n\tSELECT d.name\r\n\t\t,sum(CASE \r\n\t\t\t\tWHEN d.day = 1\r\n\t\t\t\t\tTHEN d.score\r\n\t\t\t\tELSE 0\r\n\t\t\t\tEND) R1\r\n\t\t,sum(CASE \r\n\t\t\t\tWHEN d.day = 2\r\n\t\t\t\t\tTHEN d.score\r\n\t\t\t\tELSE 0\r\n\t\t\t\tEND) R2\r\n\t\t,sum(CASE \r\n\t\t\t\tWHEN d.day = 3\r\n\t\t\t\t\tTHEN d.score\r\n\t\t\t\tELSE 0\r\n\t\t\t\tEND) R3\r\n\t\t,sum(CASE \r\n\t\t\t\tWHEN d.day = 4\r\n\t\t\t\t\tTHEN d.score\r\n\t\t\t\tELSE 0\r\n\t\t\t\tEND) R4\r\n\t\t,sum(d.score) T\r\n\tFROM dy AS d\r\n\tGROUP BY d.name\r\n\tORDER BY d.name\r\n\t)\r\nSELECT d2.name\r\n\t,d2.R1\r\n\t,d2.R2\r\n\t,d2.R3\r\n\t,d2.R4\r\n\t,d2.T\r\n\t,RANK() OVER (ORDER BY d2.T + CUT) AS Rank\r\nFROM dx AS d2 \r\nLET CUT = (\r\n\t\tCASE \r\n\t\t\tWHEN (\r\n\t\t\t\t\td2.R1 = 0\r\n\t\t\t\t\tOR d2.R2 = 0\r\n\t\t\t\t\tOR d2.R3 = 0\r\n\t\t\t\t\tOR d2.R4 = 0\r\n\t\t\t\t\t)\r\n\t\t\t\tTHEN 1000\r\n\t\t\tELSE 0\r\n\t\t\tEND\r\n\t\t)\r\nORDER BY Rank<\/pre>\n<p><span style=\"font-weight: 400;\">Observe que as classifica\u00e7\u00f5es 4, 8, 9, 10 e 11 est\u00e3o faltando por causa do empate nas pontua\u00e7\u00f5es!<\/span><\/p>\n<h5><strong>Tarefa 4: <\/strong><span style=\"font-weight: 400;\">Agora, vamos descobrir como cada jogador se saiu ap\u00f3s a rodada 1, a rodada 2 e a rodada 3 em compara\u00e7\u00e3o com a rodada final.  Usando as fun\u00e7\u00f5es de janela, \u00e9 muito f\u00e1cil fazer desaparecer os marshmallows cobertos com chocolate. <\/span><\/h5>\n<p><span style=\"font-weight: 400;\"><strong>Consulta 4:<\/strong> Use a mesma fun\u00e7\u00e3o RANK(), ordenando pela pontua\u00e7\u00e3o de cada dia (dia1, dia1+dia2, dia1+dia2+dia3) em vez de apenas a pontua\u00e7\u00e3o final.\u00a0<\/span><\/p>\n<pre class=\"\">WITH dy AS (\r\n  SELECT\r\n    pl.hnum AS holedn,\r\n    pl.ps.Nat AS country,(pl.ps.FN || \" \" || pl.ps.LN) AS name,\r\n    pl.ps.ID AS ID,\r\n    array_length(hps.Sks) AS score,\r\n    hpl.hole AS `hole`,\r\n    hpl.day AS `day`\r\n  FROM\r\n    (\r\n      SELECT\r\n        meta(usopen).id AS hnum,\r\n        ps\r\n      FROM\r\n        usopen USE keys \"holes:1:1\" unnest Ps AS ps\r\n    ) pl\r\n    INNER JOIN (\r\n      SELECT\r\n        TONUMBER(split(meta(usopen).id, \":\") [1]) AS `hole`,\r\n        TONUMBER(split(meta(usopen).id, \":\") [2]) AS `day`,\r\n        hps\r\n      FROM\r\n        usopen unnest Rs AS rs unnest rs.Hs AS hs unnest hs.HPs AS hps\r\n    ) hpl ON (pl.ps.ID = hps.ID)\r\n),\r\ndx AS (\r\n  SELECT\r\n    d.name,\r\n    sum(\r\n      CASE WHEN d.day = 1 THEN d.score ELSE 0 END\r\n    ) R1,\r\n    sum(\r\n      CASE WHEN d.day = 2 THEN d.score ELSE 0 END\r\n    ) R2,\r\n    sum(\r\n      CASE WHEN d.day = 3 THEN d.score ELSE 0 END\r\n    ) R3,\r\n    sum(\r\n      CASE WHEN d.day = 4 THEN d.score ELSE 0 END\r\n    ) R4,\r\n    sum(d.score) T\r\n  FROM\r\n    dy AS d\r\n  GROUP BY\r\n    d.name\r\n  ORDER BY\r\n    d.name\r\n)\r\nSELECT\r\n  d2.name,\r\n  d2.R1,\r\n  d2.R2,\r\n  d2.R3,\r\n  d2.R4,\r\n  d2.T,\r\n  DENSE_RANK() OVER (\r\n    ORDER BY\r\n      d2.T + CUT\r\n  ) AS rankMoney,\r\n  RANK() OVER (\r\n    ORDER BY\r\n      d2.T + CUT\r\n  ) AS rankFinal,\r\n  RANK() OVER (\r\n    ORDER BY\r\n      d2.R1\r\n  ) AS round1rank,\r\n  RANK() OVER (\r\n    ORDER BY\r\n      d2.R1 + d2.R2\r\n  ) AS round2rank,\r\n  RANK() OVER (\r\n    ORDER BY\r\n      d2.R1 + d2.R2 + d2.R3 + CUT\r\n  ) AS round3rank\r\nFROM\r\n  dx AS d2 LET CUT = (\r\n    CASE WHEN (\r\n      d2.R1 = 0\r\n      OR d2.R2 = 0\r\n      OR d2.R3 = 0\r\n      OR d2.R4 = 0\r\n    ) THEN 1000 ELSE 0 END\r\n  )\r\nORDER BY\r\n  rankFinal,\r\n  round1rank,\r\n  round2rank,\r\n  round3rank<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6068\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/12\/Screen-Shot-2018-11-29-at-11.18.45-PM-300x112.png\" alt=\"\" width=\"740\" height=\"276\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-29-at-11.18.45-PM-300x112.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-29-at-11.18.45-PM-20x7.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-11-29-at-11.18.45-PM.png 1526w\" sizes=\"auto, (max-width: 740px) 100vw, 740px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Agora voc\u00ea pode ver como os jogadores subiram ou desceram a cada dia.<\/span><\/p>\n<h5><strong>Tarefa 5: Crie o scorecard completo para o l\u00edder usando as estat\u00edsticas b\u00e1sicas de tacada por tacada.<\/strong><\/h5>\n<p><span style=\"font-weight: 400;\"><strong>Consulta 5:<\/strong> \u00a0Brooks Koepka \u00e9 o vencedor final do US Open.   Vamos obter suas pontua\u00e7\u00f5es, buraco a buraco, e obter as pontua\u00e7\u00f5es cumulativas para ele por rodada.  Observe como o agregado simples SUM() e COUNT() funciona como uma fun\u00e7\u00e3o de janela com a cl\u00e1usula OVER().<\/span><\/p>\n<pre class=\"\">SUM(d2.score) OVER (PARTITION BY d2.day ORDER BY d2.hole) hst<\/pre>\n<p><span style=\"font-weight: 400;\">Isso primeiro divide a pontua\u00e7\u00e3o por dia e depois por buraco - especificado pela cl\u00e1usula PARTITION BY, na ordem dos buracos 1-18. Em seguida, o SUM soma as pontua\u00e7\u00f5es at\u00e9 o momento.<\/span><\/p>\n<pre class=\"\">SUM(d3.score) OVER (ORDER BY d3.day,d3.hole) ToTScore<\/pre>\n<p><span style=\"font-weight: 400;\">Essa fun\u00e7\u00e3o SUM() simplesmente soma a pontua\u00e7\u00e3o do dia 1, buraco 1, ao dia 4, buraco 18 - isso \u00e9 especificado pelo ORDER BY d3.day, d3.hole dentro da cl\u00e1usula OVER().  O campo ToTScore mostra o total de shorts do torneio de Koepka em cada buraco.<\/span><\/p>\n<pre class=\"\">WITH dy AS (\r\n  SELECT\r\n    pl.hnum AS holedn,\r\n    pl.ps.Nat AS country,(pl.ps.FN || \" \" || pl.ps.LN) AS name,\r\n    pl.ps.ID AS ID,\r\n    array_length(hps.Sks) AS score,\r\n    hpl.hole AS `hole`,\r\n    hpl.day AS `day`,\r\n    hpl.Par AS Par\r\n  FROM\r\n    (\r\n      SELECT\r\n        meta(usopen).id AS hnum,\r\n        ps\r\n      FROM\r\n        usopen USE keys \"holes:1:1\" unnest Ps AS ps\r\n      WHERE\r\n        ps.LN = \"Koepka\"\r\n    ) pl\r\n    INNER JOIN (\r\n      SELECT\r\n        TONUMBER(split(meta(usopen).id, \":\") [1]) AS `hole`,\r\n        TONUMBER(split(meta(usopen).id, \":\") [2]) AS `day`,\r\n        hs.Par,\r\n        hps\r\n      FROM\r\n        usopen unnest Rs AS rs unnest rs.Hs AS hs unnest hs.HPs AS hps\r\n    ) hpl ON (pl.ps.ID = hps.ID)\r\n),\r\ndx AS (\r\n  SELECT\r\n    d.name,\r\n    d.day,\r\n    d.score,\r\n    d.hole,\r\n    d.Par\r\n  FROM\r\n    dy AS d\r\n  ORDER BY\r\n    d.name\r\n),\r\ndz AS (\r\n  SELECT\r\n    d2.day,\r\n    d2.hole,\r\n    d2.score,\r\n    SUM(d2.score) OVER (\r\n      PARTITION BY d2.day\r\n      ORDER BY\r\n        d2.hole\r\n    ) hst,\r\n    d2.Par,\r\n    SUM(d2.Par) OVER (\r\n      PARTITION BY d2.day\r\n      ORDER BY\r\n        d2.hole\r\n    ) hpr\r\n  FROM\r\n    dx AS d2 LET CUT = (\r\n      CASE WHEN (\r\n        d2.R1 = 0\r\n        OR d2.R2 = 0\r\n        OR d2.R3 = 0\r\n        OR d2.R4 = 0\r\n      ) THEN 1000 ELSE 0 END\r\n    )\r\n  ORDER BY\r\n    d2.day,\r\n    d2.hole\r\n)\r\nSELECT\r\n  d3.Par,\r\n  d3.day,\r\n  d3.hole,\r\n  d3.hst,\r\n  d3.score,(d3.hst - d3.hpr) ToPar,\r\n  sum(d3.score) OVER (\r\n    ORDER BY\r\n      d3.day,\r\n      d3.hole\r\n  ) ToTScore,\r\n  count(1) OVER (\r\n    ORDER BY\r\n      d3.day,\r\n      d3.hole\r\n  ) HoleNum\r\nFROM\r\n  dz AS d3<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-6077 alignleft\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/12\/Screen-Shot-2018-12-02-at-11.54.48-AM-300x207.png\" alt=\"\" width=\"691\" height=\"477\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-02-at-11.54.48-AM-300x207.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-02-at-11.54.48-AM-768x531.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-02-at-11.54.48-AM-20x14.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/Screen-Shot-2018-12-02-at-11.54.48-AM.png 828w\" sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><\/p>","protected":false},"excerpt":{"rendered":"<p>Co-author:\u00a0 Sitaram Vemulapalli, Principal Engineer, Couchbase R&amp;D. \u201cThe answer my friend is hiding in JSON&#8221; &#8211; Bob Dylan There are a lot of public JSON datasets and then is\u00a0awesome JSON datasets. Every company, including yours, has stored a lot of [&hellip;]<\/p>","protected":false},"author":55,"featured_media":6074,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2294,1816,1819,1812],"tags":[1261,1725],"ppma_author":[8929],"class_list":["post-6055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-analytics","category-couchbase-server","category-data-modeling","category-n1ql-query","tag-json","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JSON to Insights: Fast and Easy - 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\/json-to-insights-fast-and-easy\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JSON to Insights: Fast and Easy\" \/>\n<meta property=\"og:description\" content=\"Co-author:\u00a0 Sitaram Vemulapalli, Principal Engineer, Couchbase R&amp;D. \u201cThe answer my friend is hiding in JSON&#8221; &#8211; Bob Dylan There are a lot of public JSON datasets and then is\u00a0awesome JSON datasets. Every company, including yours, has stored a lot of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/json-to-insights-fast-and-easy\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-02T06:08:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T01:44:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Keshav Murthy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rkeshavmurthy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Keshav Murthy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/\"},\"author\":{\"name\":\"Keshav Murthy\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c261644262bf98e146372fe647682636\"},\"headline\":\"JSON to Insights: Fast and Easy\",\"datePublished\":\"2018-12-02T06:08:55+00:00\",\"dateModified\":\"2025-06-14T01:44:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/\"},\"wordCount\":883,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png\",\"keywords\":[\"JSON\",\"NoSQL Database\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Analytics\",\"Couchbase Server\",\"Data Modeling\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/\",\"name\":\"JSON to Insights: Fast and Easy - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png\",\"datePublished\":\"2018-12-02T06:08:55+00:00\",\"dateModified\":\"2025-06-14T01:44:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png\",\"width\":1000,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JSON to Insights: Fast and Easy\"}]},{\"@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\/c261644262bf98e146372fe647682636\",\"name\":\"Keshav Murthy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4e51d72fc07c662aa791316deafffac4\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g\",\"caption\":\"Keshav Murthy\"},\"description\":\"Keshav Murthy is a Vice President at Couchbase R&amp;D. Previously, he was at MapR, IBM, Informix, Sybase, with more than 20 years of experience in database design &amp; development. He lead the SQL and NoSQL R&amp;D team at IBM Informix. He has received two President's Club awards at Couchbase, two Outstanding Technical Achievement Awards at IBM. Keshav has a bachelor's degree in Computer Science and Engineering from the University of Mysore, India, holds eleven US patents and has four US patents pending.\",\"sameAs\":[\"https:\/\/blog.planetnosql.com\/\",\"https:\/\/x.com\/rkeshavmurthy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/keshav-murthy\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JSON to Insights: Fast and Easy - 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\/json-to-insights-fast-and-easy\/","og_locale":"pt_BR","og_type":"article","og_title":"JSON to Insights: Fast and Easy","og_description":"Co-author:\u00a0 Sitaram Vemulapalli, Principal Engineer, Couchbase R&amp;D. \u201cThe answer my friend is hiding in JSON&#8221; &#8211; Bob Dylan There are a lot of public JSON datasets and then is\u00a0awesome JSON datasets. Every company, including yours, has stored a lot of [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/json-to-insights-fast-and-easy\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-12-02T06:08:55+00:00","article_modified_time":"2025-06-14T01:44:58+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png","type":"image\/png"}],"author":"Keshav Murthy","twitter_card":"summary_large_image","twitter_creator":"@rkeshavmurthy","twitter_misc":{"Written by":"Keshav Murthy","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/"},"author":{"name":"Keshav Murthy","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c261644262bf98e146372fe647682636"},"headline":"JSON to Insights: Fast and Easy","datePublished":"2018-12-02T06:08:55+00:00","dateModified":"2025-06-14T01:44:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/"},"wordCount":883,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png","keywords":["JSON","NoSQL Database"],"articleSection":["Best Practices and Tutorials","Couchbase Analytics","Couchbase Server","Data Modeling","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/","url":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/","name":"JSON to Insights: Fast and Easy - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png","datePublished":"2018-12-02T06:08:55+00:00","dateModified":"2025-06-14T01:44:58+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/12\/json-insights.png","width":1000,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/json-to-insights-fast-and-easy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JSON to Insights: Fast and Easy"}]},{"@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\/c261644262bf98e146372fe647682636","name":"Keshav Murthy","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4e51d72fc07c662aa791316deafffac4","url":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","caption":"Keshav Murthy"},"description":"Keshav Murthy \u00e9 vice-presidente de P&amp;D da Couchbase. Anteriormente, ele trabalhou na MapR, IBM, Informix e Sybase, com mais de 20 anos de experi\u00eancia em design e desenvolvimento de bancos de dados. Ele liderou a equipe de P&amp;D de SQL e NoSQL na IBM Informix. Ele recebeu dois pr\u00eamios President's Club na Couchbase e dois Outstanding Technical Achievement Awards na IBM. Keshav \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o e Engenharia pela Universidade de Mysore, \u00cdndia, det\u00e9m onze patentes nos EUA e tem quatro patentes pendentes nos EUA.","sameAs":["https:\/\/blog.planetnosql.com\/","https:\/\/x.com\/rkeshavmurthy"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/keshav-murthy\/"}]}},"authors":[{"term_id":8929,"user_id":55,"is_guest":0,"slug":"keshav-murthy","display_name":"Keshav Murthy","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","author_category":"","last_name":"Murthy","first_name":"Keshav","job_title":"","user_url":"https:\/\/blog.planetnosql.com\/","description":"Keshav Murthy \u00e9 vice-presidente de P&amp;D da Couchbase. Anteriormente, ele trabalhou na MapR, IBM, Informix e Sybase, com mais de 20 anos de experi\u00eancia em design e desenvolvimento de bancos de dados. Ele liderou a equipe de P&amp;D de SQL e NoSQL na IBM Informix. Recebeu dois pr\u00eamios President's Club na Couchbase e dois Outstanding Technical Achievement Awards na IBM. Keshav \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o e Engenharia pela Universidade de Mysore, \u00cdndia, det\u00e9m dez patentes nos EUA e tem tr\u00eas patentes pendentes nos EUA."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6055","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\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=6055"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6055\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/6074"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=6055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=6055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=6055"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=6055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}