Tenho visto muito interesse na área sobre o uso do Couchbase com o R. É uma integração fácil, portanto, aqui você tem alguns exemplos para começar a usá-lo agora mesmo.
Para que você saiba um pouco mais, o R é uma linguagem e um ambiente para computação estatística e gráficos. Você a encontrará nas primeiras posições das classificações das melhores linguagens para análise de dados, aprendizado de máquina ou processamento de dados. Os cientistas de dados usam o R como uma de suas ferramentas mais poderosas.
Para a ingestão de dados, o R pode carregar arquivos em diferentes formatos, como csv, excel, html, texto simples e outros, com uma simples linha de comando. O R também pode carregar dados de sites remotos usando HTTP e pode trabalhar facilmente com JSON.
Com tudo isso em mente, como podemos carregar dados do Couchbase para o R? Precisamos de um adaptador especial? N1QL é a resposta. O mecanismo de consulta do Couchbase aceita solicitações REST, retornando documentos JSON, para que possamos importar dados diretamente para o R. Não são necessários componentes adicionais.
Aqui você tem alguns exemplos com dados do bucket "travel-sample", incluído no Couchbase como um conjunto de dados de exemplo. Estou usando aqui as versões R 3.4.1 e Couchbase 4.6.2.
Como primeiro exercício, vamos carregar as 20 principais companhias aéreas com mais voos em nosso sistema. Carregaremos esses dados em um Data Frame do R, mostraremos os resultados no console e criaremos um gráfico de barras simples.
No lado do Couchbase, esta é a consulta a ser executada:
|
1 2 3 4 5 6 |
SELECIONAR a.nome, contagem(*) como total_voos DE `viagens-amostra` r JUNTAR `viagens-amostra` a ON CHAVES r.companhia aérea ONDE r.tipo ="route" (rota) E a.tipo="companhia aérea" GRUPO BY a.nome ORDEM BY total_flights DESC LIMITE 20 |
Para o lado do R, usaremos o Console do R. Primeiro, precisamos importar as bibliotecas usadas neste exercício:
|
1 2 3 4 |
biblioteca(httr) biblioteca(jsonlite) biblioteca(ggplot2) biblioteca(folheto) |
A próxima etapa é criar algumas variáveis, incluindo o endereço do nó do Couchbase Query e a consulta. Observe as aspas duplas com escape (\"):
|
1 2 |
cbServidor <- "https://cb451box:8093/query/service" consulta <- "SELECT a.name, count(*) as total_flights FROM `travel-sample` r JOIN `travel-sample` a ON KEYS r.airlineid WHERE r.type =\"route\" AND a.type=\"airline\" GROUP BY a.name ORDER BY total_flights DESC LIMIT 20" |
Em seguida, devemos criar a solicitação HTTP e ler a resposta no formato JSON:
|
1 2 |
req <- httr::POST(cbServidor, httr::add_headers("Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8"), corpo = colar("statement=", consulta)) res <- fromJSON(httr::conteúdo(req, "texto")) |
OBSERVAÇÃO: Se você estiver usando um bucket protegido por senha, deverá incluir credenciais como as seguintes:
|
1 2 |
créditos <- "[{\"user\":\"local:bucketName\", \"pass\":\"password\"}]" req <- httr::POST(cbServidor, httr::add_headers("Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8"), corpo = colar("statement=", consulta, "&creds=", créditos)); |
Em seguida, podemos salvar o resultado em uma variável.
|
1 |
companhia aéreaVôos <- res$resultados |
Para ver o valor, basta digitar o nome da variável:

Também podemos criar um gráfico de barras usando a biblioteca ggplot:
|
1 |
ggplot(dados=companhia aéreaVôos, aes(x=nome, y=total_flights)) + tema(eixo.texto.x=texto_do_elemento(ângulo=90,justo=1)) + geom_bar(estatísticas="identidade") |
Este é o resultado:

Como segundo exemplo, vamos pesquisar os hotéis que aceitam animais de estimação disponíveis em Londres e mostrá-los em um mapa. A consulta N1QL é a seguinte:
|
1 2 3 |
SELECIONAR nome,geo.lat como lat,geo.solitário como longo DE `viagens-amostra` ONDE tipo="hotel" E cidade="Londres" E pets_ok=verdadeiro |
O código R para executar a consulta e salvar os resultados:
|
1 2 3 4 |
consulta <- "SELECT name, geo.lat as lat, geo.lon as long FROM `travel-sample` WHERE type=\"hotel\" AND city=\"London\" AND pets_ok=true" req <- httr::POST(cbServidor, httr::add_headers("Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8"), corpo = colar("statement=", consulta)) res <- fromJSON(httr::conteúdo(req, "texto")) petFriendlyHotelsLondres <- res$resultados |
Estes são os resultados:

Agora podemos usar a biblioteca leaflet para desenhar os resultados em um mapa:
|
1 |
folheto(dados = petFriendlyHotelsLondres) %>% addTiles() %>% addMarkers(~longo, ~lat, pop-up = ~como.caráter(nome), rótulo = ~como.caráter(nome)) %>% addProviderTiles(provedores$OpenStreetMap) |
O mapa é aberto em um navegador:
Isso é tudo. Espero que isso seja útil para os primeiros passos no uso do Couchbase a partir do R. Boa análise de dados!
Para obter mais detalhes, acesse:
Referência da API REST do N1QL
R: O projeto R para computação estatística
Folheto para R
Hi,
Como lidar com o fato de eu ter vários URLs para acessar o n1ql.
Saudações
Olá Snehashis.
Ao usar qualquer SDK do Couchbase, como node.js, Java, .Net etc., você obtém um mapa de cluster a partir da conexão inicial, e o cliente sabe como equilibrar as solicitações para os nós habilitados para consulta.
Usando o R, você não tem esse cliente, portanto, não há "visualização de cluster", e você precisa gerenciar o endereço do servidor a partir do seu código. Em resumo, você precisa escolher um nó de consulta do seu cluster.