{"id":12417,"date":"2021-11-08T12:38:53","date_gmt":"2021-11-08T20:38:53","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12417"},"modified":"2025-06-13T21:25:11","modified_gmt":"2025-06-14T04:25:11","slug":"ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/","title":{"rendered":"ML encontra NoSQL: Integra\u00e7\u00e3o de fun\u00e7\u00f5es definidas pelo usu\u00e1rio em Python com SQL++ para an\u00e1lise"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Depois de conversar com nossos clientes sobre o atraso na obten\u00e7\u00e3o de insights anal\u00edticos de seus modelos de aprendizado de m\u00e1quina baseados em Python, decidimos criar um pipeline cont\u00ednuo do Python para o Couchbase Analytics que retorna insights mais r\u00e1pidos em tempo real.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Introdu\u00e7\u00e3o<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Com o lan\u00e7amento do <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/whats-new\/\"><span style=\"font-weight: 400\">Servidor Couchbase 7.0<\/span><\/a><span style=\"font-weight: 400\">Estamos animados para lan\u00e7ar um novo recurso que voc\u00ea pode explorar em <\/span><b>Modo Developer Preview<\/b><span style=\"font-weight: 400\">Integra\u00e7\u00e3o de UDFs do Python com o Couchbase Analytics.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">O aprendizado de m\u00e1quina transformou radicalmente as maneiras pelas quais as organiza\u00e7\u00f5es entendem as necessidades de seus clientes. Os dom\u00ednios de an\u00e1lise avan\u00e7ada, como a an\u00e1lise preditiva (rotatividade de clientes, sentimento do cliente etc.) e a modelagem financeira, est\u00e3o cada vez mais dependentes do processamento de dados em escala, quase em tempo real, e da extra\u00e7\u00e3o de insights valiosos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Este blog abordar\u00e1 o processo de configura\u00e7\u00e3o de inst\u00e2ncias do Couchbase, sincroniza\u00e7\u00e3o com o reposit\u00f3rio AnalyticsML remoto, cria\u00e7\u00e3o dos diret\u00f3rios necess\u00e1rios e execu\u00e7\u00e3o dos exemplos de c\u00f3digo necess\u00e1rios.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O p\u00fablico-alvo deste blog \u00e9 qualquer pessoa casualmente interessada na interse\u00e7\u00e3o entre o Couchbase Server, o aprendizado de m\u00e1quina, o Python e o servi\u00e7o Couchbase Analytics. H\u00e1 certos conceitos apresentados que esperamos que o leitor compreenda (mas n\u00e3o se preocupe, incluiremos links para que voc\u00ea se atualize). De modo geral, queremos que qualquer pessoa, mesmo que tenha um m\u00ednimo de interesse, passe por este tutorial para ver como o poder do ML pode se concentrar nos dados residentes no Couchbase usando seus algoritmos de ML para obter insights instant\u00e2neos.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Pr\u00e9-requisitos e premissas:<\/span><\/h3>\n<h4><span style=\"font-weight: 400\">Conhecimento\/entendimento:<\/span><\/h4>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Servidor Couchbase: <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/architecture-overview.html\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/server\/current\/learn\/architecture-overview.html<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Instala\u00e7\u00e3o do Couchbase Server no Docker: <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/install\/getting-started-docker.html#multi-node-cluster-one-host\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/server\/current\/install\/getting-started-docker.html#multi-node-cluster-one-host<\/span><\/a><span style=\"font-weight: 400\">\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Couchbase Analytics: <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/introduction.html\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/server\/current\/analytics\/introduction.html<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">An\u00e1lise de sentimento usando o Sci-kit Learn: <\/span><a href=\"https:\/\/scikit-learn.org\/stable\/tutorial\/basic\/tutorial.html\"><span style=\"font-weight: 400\">https:\/\/scikit-learn.org\/stable\/tutorial\/basic\/tutorial.html<\/span><\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">Configura\u00e7\u00e3o do ambiente:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Al\u00e9m disso, para seguir as etapas abaixo, voc\u00ea precisar\u00e1 de uma implementa\u00e7\u00e3o do Couchbase em funcionamento:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Um IDE Python v3.8+ de sua prefer\u00eancia (usarei o VSCode para este blog).<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Docker Desktop instalado em seu computador<\/span><\/li>\n<li style=\"font-weight: 400\">\n<pre class=\"\">The code samples will be formatted to indicate what should be included in your sample<\/pre>\n<\/li>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">As amostras da linha de comando ser\u00e3o formatadas em <\/span><\/i><i><span style=\"font-weight: 400\">it\u00e1lico<\/span><\/i><i><span style=\"font-weight: 400\"> para indicar o que deve ser inserido<\/span><\/i><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Nos exemplos em Python, todas as bibliotecas necess\u00e1rias s\u00e3o identificadas (sklearn \u00e9 do scikit-learn). Se voc\u00ea n\u00e3o tiver essas bibliotecas, instale-as com '<\/span><i><span style=\"font-weight: 400\">pip3 install<\/span><\/i><span style=\"font-weight: 400\">'<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os dois conjuntos de dados usados para este blog podem ser encontrados no kaggle em (<\/span><a href=\"https:\/\/www.kaggle.com\/stefanoleone992\/rotten-tomatoes-movies-and-critic-reviews-dataset\"><span style=\"font-weight: 400\">https:\/\/www.kaggle.com\/stefanoleone992\/rotten-tomatoes-movies-and-critic-reviews-dataset<\/span><\/a><span style=\"font-weight: 400\">). Esses arquivos s\u00e3o bastante grandes, portanto, um link para eles \u00e9 fornecido para que voc\u00ea possa baix\u00e1-los quando estiver acompanhando.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">Configura\u00e7\u00e3o do servidor Couchbase:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Nesta se\u00e7\u00e3o, voc\u00ea instalar\u00e1 e configurar\u00e1 o Couchbase Server.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Na linha de comando do terminal, crie os n\u00f3s (\"cb-analytics\" e \"cb\"):<\/span>\n<ol>\n<li style=\"font-weight: 400\">\n<pre class=\"\">docker run -d --name cb-analytics couchbase:7.0.2<\/pre>\n<\/li>\n<li style=\"font-weight: 400\">\n<pre class=\"\">docker run -d --name cb -p 8091-8096:8091-8096 -p 11210-11211:11210-11211 couchbase<\/pre>\n<\/li>\n<\/ol>\n<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Para confirmar que a inst\u00e2ncia foi iniciada com \u00eaxito:<\/span>\n<ol>\n<li><span style=\"font-weight: 400\">registros do docker db1<\/span><\/li>\n<li><\/li>\n<\/ol>\n<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Se o cont\u00eainer tiver sido iniciado, a sa\u00edda dever\u00e1 come\u00e7ar com o seguinte:<\/span>\n<ol>\n<li>\n<pre>Starting Couchbase Server -- Web UI available at https:\/\/:8091<\/pre>\n<\/li>\n<\/ol>\n<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Descubra os endere\u00e7os IP locais do cb e do cb-analytics:<\/span>\n<ol>\n<li style=\"font-weight: 400\">\n<pre>docker inspect --format '{{ .NetworkSettings.IPAddress }}' cb<\/pre>\n<\/li>\n<li style=\"font-weight: 400\">\n<pre>docker inspect --format '{{ .NetworkSettings.IPAddress }}' cb-analytics<\/pre>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12418 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/pythonudf-1024x175.png\" alt=\"\" width=\"900\" height=\"154\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/pythonudf-1024x175.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/pythonudf-300x51.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/pythonudf-768x131.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/pythonudf-1536x262.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/pythonudf-20x3.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/pythonudf-1320x225.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/pythonudf.png 1600w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\">5. Ir para <\/span><i><span style=\"font-weight: 400\">https:\/\/ localhost:8091<\/span><\/i><span style=\"font-weight: 400\"> para iniciar a configura\u00e7\u00e3o de sua inst\u00e2ncia do couchbase e selecione '<\/span><i><span style=\"font-weight: 400\">Configurar novo cluster<\/span><\/i><span style=\"font-weight: 400\">r' e prossiga normalmente com o Assistente de configura\u00e7\u00e3o:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12419 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/server-1024x684.png\" alt=\"\" width=\"900\" height=\"601\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/server-1024x684.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/server-300x200.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/server-768x513.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/server-400x267.png 400w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/server-450x300.png 450w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/server-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/server.png 1060w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<ol>\n<li style=\"list-style-type: none\"><\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os nomes do servidor Couchbase s\u00e3o <\/span><b>'cb<\/b><span style=\"font-weight: 400\">' e '<\/span><b>cb-analytics<\/b><span style=\"font-weight: 400\">' com o nome de usu\u00e1rio <em>'<\/em><\/span><em><span style=\"font-weight: 400\">Administrador<\/span><\/em><span style=\"font-weight: 400\"><em>'<\/em> e a senha '<\/span><em><span style=\"font-weight: 400\">senha<\/span><\/em><span style=\"font-weight: 400\">'<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Depois que o cluster \u00e9 inicializado no primeiro n\u00f3 do Couchbase Server (cb), a pr\u00f3xima etapa \u00e9 adicionar os n\u00f3s do Couchbase Server do cb-analytics ao cluster.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">No Console da Web do Couchbase, v\u00e1 para a guia Servidores e clique em ADICIONAR SERVIDOR. Isso abre a caixa de di\u00e1logo \"Add Server Node\" (Adicionar n\u00f3 do servidor).<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12420 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/servernode-776x1024.png\" alt=\"\" width=\"776\" height=\"1024\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/servernode-776x1024.png 776w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/servernode-227x300.png 227w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/servernode-768x1013.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/servernode-300x396.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/servernode-15x20.png 15w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/servernode.png 1060w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">No campo Hostname\/IP Address, digite o endere\u00e7o IP que voc\u00ea capturou anteriormente para cb. Clique em Add Server (Adicionar servidor) para adicionar o n\u00f3 \u00e0 configura\u00e7\u00e3o do cluster.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Depois que o cb e o cb-analytics forem adicionados com \u00eaxito \u00e0 configura\u00e7\u00e3o do cluster, clique em Rebalance para tornar os novos n\u00f3s ativos no cluster.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Crie dois buckets, um para \"movies\" e outro para \"movie_reviews\":<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12421 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/databucket.png\" alt=\"\" width=\"531\" height=\"438\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/databucket.png 531w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/databucket-300x247.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/databucket-20x16.png 20w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12422 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/databucket2.png\" alt=\"\" width=\"530\" height=\"436\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/databucket2.png 530w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/databucket2-300x247.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/databucket2-20x16.png 20w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Agora voc\u00ea tem um cluster do Couchbase de v\u00e1rios n\u00f3s em execu\u00e7\u00e3o em cont\u00eaineres em um \u00fanico host. Seus dois buckets e sua inst\u00e2ncia do Couchbase est\u00e3o prontos para serem executados (se precisar de mais detalhes, aqui est\u00e1 o link para o artigo <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/install\/getting-started-docker.html#multi-node-cluster-one-host\"><span style=\"font-weight: 400\">etapas em mais detalhes<\/span><\/a><span style=\"font-weight: 400\">).\u00a0<\/span><\/li>\n<\/ul>\n<p><b>AVISO: O SERVIDOR COUCHBASE DEVE ESTAR NO MODO DE VISUALIZA\u00c7\u00c3O PARA DESENVOLVEDORES. A CONFIGURA\u00c7\u00c3O DO SERVIDOR COUCHBASE NESSE MODO \u00c9 UMA ALTERA\u00c7\u00c3O IRRECUPER\u00c1VEL E \u00c9 ALTAMENTE RECOMEND\u00c1VEL N\u00c3O FAZER ESSA ALTERA\u00c7\u00c3O EM UM AMBIENTE DE PRODU\u00c7\u00c3O OU EM UM SISTEMA CR\u00cdTICO.\u00a0<\/b><\/p>\n<p><span style=\"font-weight: 400\">A configura\u00e7\u00e3o do Couchbase Server no modo Developer Preview exige que voc\u00ea execute o seguinte em uma linha de comando.<\/span><\/p>\n<pre>\/opt\/couchbase\/bin\/couchbase-cli enable-developer-preview -c localhost:8091 -u Administrator \\ -p password --enable<\/pre>\n<h4><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12423 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/password-enable-1024x122.png\" alt=\"\" width=\"900\" height=\"107\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/password-enable-1024x122.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/password-enable-300x36.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/password-enable-768x91.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/password-enable-1536x182.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/password-enable-20x2.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/password-enable-1320x157.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/password-enable.png 1600w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/h4>\n<p><span style=\"font-weight: 400\">Configura\u00e7\u00e3o do sistema de arquivos:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os arquivos para esse conjunto de dados de exerc\u00edcio e treinamento podem ser encontrados no arquivo <\/span><a href=\"https:\/\/github.com\/couchbaselabs\/AnalyticsML\"><span style=\"font-weight: 400\">reposit\u00f3rio do github<\/span><\/a><span style=\"font-weight: 400\">\u00a0<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12424 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/githubrepo-1024x159.png\" alt=\"\" width=\"900\" height=\"140\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/githubrepo-1024x159.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/githubrepo-300x47.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/githubrepo-768x120.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/githubrepo-1536x239.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/githubrepo-20x3.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/githubrepo-1320x205.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/githubrepo.png 1600w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Voc\u00ea precisar\u00e1 criar uma pasta de trabalho para manter o conte\u00fado separado das outras atividades (ou seja, examples\/AnalyticsML) e, dentro dessa pasta, precisar\u00e1 criar outra pasta chamada '<\/span><i><span style=\"font-weight: 400\">tubula\u00e7\u00e3o<\/span><\/i><span style=\"font-weight: 400\">'.<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12425 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/github.png\" alt=\"\" width=\"687\" height=\"156\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/github.png 687w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/github-300x68.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/github-20x5.png 20w\" sizes=\"auto, (max-width: 687px) 100vw, 687px\" \/><\/p>\n<p>Voc\u00ea s\u00f3 precisa configurar o ambiente necess\u00e1rio do Couchbase Server no Docker. Na Parte 2, configuraremos os exemplos de c\u00f3digo necess\u00e1rios, importaremos a fun\u00e7\u00e3o e, por fim, executaremos a fun\u00e7\u00e3o de an\u00e1lise de sentimentos do Couchbase Analytics.<\/p>\n<p><span style=\"font-weight: 400\">Quer saber mais sobre o Couchbase Analytics? Assista \u00e0 sess\u00e3o completa do ConnectONLINE aqui:<\/span><\/p>\n<p><iframe loading=\"lazy\" title=\"O aprendizado de m\u00e1quina encontra o NoSQL: UDFs em Python - CBConnect21\" width=\"900\" height=\"506\" src=\"https:\/\/www.youtube.com\/embed\/nyHUKfTMKDQ?feature=oembed&#038;enablejsapi=1&#038;origin=https:\/\/www.couchbase.com\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/p>\n<p><b data-stringify-type=\"bold\">Agradecimentos<\/b><br \/>\nAgradecimentos a\u00a0<b data-stringify-type=\"bold\">Anuj Kothari,\u00a0<\/b>um estagi\u00e1rio de ver\u00e3o em gerenciamento de produtos do servi\u00e7o Couchbase Analytics, cujos esfor\u00e7os iniciais fizeram com que isso come\u00e7asse e sa\u00edsse do papel no ver\u00e3o passado. Agradecimentos a\u00a0<b data-stringify-type=\"bold\">Idris Motiwala<\/b>Gerente de produto principal do Couchbase Analytics Service e\u00a0<b data-stringify-type=\"bold\">Ian Maxon<\/b>engenheiro de software do Couchbase Analytics Service, por seu trabalho editorial para tornar este blog mais funcional.<\/p>","protected":false},"excerpt":{"rendered":"<p>After conversations with our customers about the delay in obtaining analytical insights from their Python-based machine learning models, we set out to create a seamless pipeline from Python to Couchbase Analytics that returns faster insights in real time.\u00a0 Introduction With [&hellip;]<\/p>","protected":false},"author":79257,"featured_media":12429,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2294,1816,9139,1812],"tags":[8907,1519,2140,1725],"ppma_author":[9482,9483],"class_list":["post-12417","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","category-couchbase-server","category-python","category-n1ql-query","tag-couchbase-server-7-0","tag-docker","tag-machine-learning","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Learn about a new feature that you can explore in Developer Preview mode: integration of Python UDFs with Couchbase Analytics\" \/>\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\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics\" \/>\n<meta property=\"og:description\" content=\"Learn about a new feature that you can explore in Developer Preview mode: integration of Python UDFs with Couchbase Analytics\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-08T20:38:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:25:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Muk Sreenivasan, Anuj Kothari\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Muk Sreenivasan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/\"},\"author\":{\"name\":\"Muk Sreenivasan\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b37fc76b5459210102cef15674423031\"},\"headline\":\"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics\",\"datePublished\":\"2021-11-08T20:38:53+00:00\",\"dateModified\":\"2025-06-14T04:25:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/\"},\"wordCount\":890,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg\",\"keywords\":[\"Couchbase Server 7.0\",\"docker\",\"Machine Learning (ML)\",\"NoSQL Database\"],\"articleSection\":[\"Couchbase Analytics\",\"Couchbase Server\",\"Python\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/\",\"name\":\"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg\",\"datePublished\":\"2021-11-08T20:38:53+00:00\",\"dateModified\":\"2025-06-14T04:25:11+00:00\",\"description\":\"Learn about a new feature that you can explore in Developer Preview mode: integration of Python UDFs with Couchbase Analytics\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for 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\/b37fc76b5459210102cef15674423031\",\"name\":\"Muk Sreenivasan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/194f54236bbc53ba3b1b5550c654d008\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/muk_sreenivasan.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/muk_sreenivasan.png\",\"caption\":\"Muk Sreenivasan\"},\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/muk-sreenivasan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics - The Couchbase Blog","description":"Saiba mais sobre um novo recurso que voc\u00ea pode explorar no modo Developer Preview: integra\u00e7\u00e3o de UDFs do Python com o Couchbase Analytics","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\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/","og_locale":"pt_BR","og_type":"article","og_title":"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics","og_description":"Learn about a new feature that you can explore in Developer Preview mode: integration of Python UDFs with Couchbase Analytics","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-11-08T20:38:53+00:00","article_modified_time":"2025-06-14T04:25:11+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Muk Sreenivasan, Anuj Kothari","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Muk Sreenivasan","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/"},"author":{"name":"Muk Sreenivasan","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b37fc76b5459210102cef15674423031"},"headline":"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics","datePublished":"2021-11-08T20:38:53+00:00","dateModified":"2025-06-14T04:25:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/"},"wordCount":890,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg","keywords":["Couchbase Server 7.0","docker","Machine Learning (ML)","NoSQL Database"],"articleSection":["Couchbase Analytics","Couchbase Server","Python","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/","url":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/","name":"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for Analytics - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg","datePublished":"2021-11-08T20:38:53+00:00","dateModified":"2025-06-14T04:25:11+00:00","description":"Saiba mais sobre um novo recurso que voc\u00ea pode explorar no modo Developer Preview: integra\u00e7\u00e3o de UDFs do Python com o Couchbase Analytics","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/luca-bravo-XJXWbfSo2f0-unsplash-scaled.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/ml-meets-nosql-integrating-python-user-defined-functions-with-n1ql-for-analytics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ML Meets NoSQL: Integrating Python User-Defined Functions with SQL++ for 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\/b37fc76b5459210102cef15674423031","name":"Muk Sreenivasan","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/194f54236bbc53ba3b1b5550c654d008","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/muk_sreenivasan.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/muk_sreenivasan.png","caption":"Muk Sreenivasan"},"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/muk-sreenivasan\/"}]}},"authors":[{"term_id":9482,"user_id":79257,"is_guest":0,"slug":"muk-sreenivasan","display_name":"Muk Sreenivasan","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/muk_sreenivasan.png","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/muk_sreenivasan.png"},"author_category":"","last_name":"Sreenivasan","first_name":"Muk","job_title":"","user_url":"","description":"Muk is a Senior Sales Engineer at Couchbase covering the west coast of the United States. He has over 20 years experience in product support, product development, product management and Sales. He lives and works in Silicon Valley."},{"term_id":9483,"user_id":0,"is_guest":1,"slug":"anuj-kothari","display_name":"Anuj Kothari","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/Screen-Shot-2021-11-08-at-12.21.36-PM.png","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/Screen-Shot-2021-11-08-at-12.21.36-PM.png"},"author_category":"","last_name":"Kothari","first_name":"Anuj","job_title":"","user_url":"","description":"Anuj Kothari was a Product Management Intern at Couchbase working on the Analytics service. He also has experience in consulting, data science, and competitive debate. He is currently pursuing his undergraduate education in computer science and economics at the University of Pennsylvania."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12417","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\/79257"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=12417"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12417\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/12429"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=12417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=12417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=12417"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=12417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}