He visto mucho interés en el campo sobre el uso de Couchbase con R. Es una integración fácil, así que aquí tienes algunos ejemplos para empezar a usarlo ahora mismo.
Como pequeño antecedente, R es un lenguaje y entorno para computación estadística y gráficos. Lo encontrarás en las primeras posiciones de los rankings de mejores lenguajes para Análisis de Datos, Machine Learning o Data Crunching. Los científicos de datos utilizan R como una de sus herramientas más potentes.
Para la ingesta de datos, R puede cargar archivos en diferentes formatos como csv, excel, html, texto plano, y más con una simple línea de comandos. R también puede cargar datos de sitios remotos mediante HTTP y trabajar fácilmente con JSON.
Con todo esto en mente, ¿cómo podemos cargar datos de Couchbase en R? ¿Necesitamos un adaptador especial? N1QL es la respuesta. El motor de consultas de Couchbase acepta peticiones REST, devolviendo documentos JSON, por lo que podemos importar datos directamente a R. No se necesitan componentes extra.
Aquí tienes algunos ejemplos con datos del bucket "travel-sample", incluido en Couchbase como conjunto de datos de ejemplo. Estoy usando aquí las versiones R 3.4.1 y Couchbase 4.6.2.
Como primer ejercicio, vamos a cargar las 20 compañías aéreas con más vuelos en nuestro sistema. Cargaremos estos datos en un R Data Frame, mostraremos los resultados en la consola y construiremos un sencillo gráfico de barras.
Desde el lado de Couchbase, esta es la consulta a ejecutar:
1 2 3 4 5 6 |
SELECCIONE a.nombre, cuente(*) como total_vuelos DESDE `viaje-muestra` r ÚNASE A `viaje-muestra` a EN TECLAS r.airlineid DONDE r.tipo ="ruta" Y a.tipo="aerolínea" GRUPO POR a.nombre PEDIR POR total_vuelos DESC LÍMITE 20 |
Para la parte de R, utilizaremos la R Console. En primer lugar, tenemos que importar las bibliotecas utilizadas en este ejercicio:
1 2 3 4 |
biblioteca(httr) biblioteca(jsonlite) biblioteca(ggplot2) biblioteca(folleto) |
El siguiente paso es construir algunas variables, incluyendo la dirección del nodo Couchbase Query y la consulta. Fíjate en las comillas dobles escapadas (\"):
1 2 |
cbServidor <- "http://cb451box:8093/query/service" consulta <- "SELECT a.name, count(*) as total_flights FROM `muestra-de-viajes` r JOIN `muestra-de-viajes` a ON KEYS r.airlineid WHERE r.type =\"route\" AND a.type="airline\" GROUP BY a.name ORDER BY total_flights DESC LIMIT 20". |
Luego debemos construir la petición HTTP, y leer la respuesta en formato JSON:
1 2 |
consulte <- httr::POST(cbServidor, httr::add_headers("Tipo de contenido" = "application/x-www-form-urlencoded;charset=UTF-8"), cuerpo = pegar("statement=", consulta)) res <- fromJSON(httr::contenido(consulte, "texto")) |
NOTA: Si está utilizando un cubo protegido por contraseña, debe incluir credenciales como las siguientes:
1 2 |
creds <- "[{\"user\":\"local:bucketName\", \"pass\":\"password\"}]" consulte <- httr::POST(cbServidor, httr::add_headers("Tipo de contenido" = "application/x-www-form-urlencoded;charset=UTF-8"), cuerpo = pegar("statement=", consulta, "&creds=", creds)); |
A continuación, podemos guardar el resultado en una variable.
1 |
compañía aéreaVuelos <- res$resultados |
Para ver el valor basta con escribir el nombre de la variable:
También podemos construir un gráfico de barras utilizando la biblioteca ggplot:
1 |
ggplot(datos=compañía aéreaVuelos, aes(x=nombre, y=total_vuelos)) + tema(eje.texto.x=elemento_texto(ángulo=90,hjust=1)) + geom_bar(stat="identidad") |
Este es el resultado:
Como segundo ejemplo, vamos a buscar los hoteles que admiten mascotas disponibles en Londres, y mostrarlos sobre un mapa. La consulta N1QL es la siguiente:
1 2 3 |
SELECCIONE nombre,geo.lat como lat,geo.lon como largo DESDE `viaje-muestra` DONDE tipo="hotel" Y ciudad="Londres" Y mascotas_ok=verdadero |
El código R para ejecutar la consulta y guardar los 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" consulte <- httr::POST(cbServidor, httr::add_headers("Tipo de contenido" = "application/x-www-form-urlencoded;charset=UTF-8"), cuerpo = pegar("statement=", consulta)) res <- fromJSON(httr::contenido(consulte, "texto")) PetFriendlyHotelsLondon <- res$resultados |
Estos son los resultados:
Ahora podemos utilizar la biblioteca leaflet para dibujar los resultados sobre un mapa:
1 |
folleto(datos = PetFriendlyHotelsLondon) %>% addTiles() %>% addMarkers(~largo, ~lat, ventana emergente = ~como.carácter(nombre), etiqueta = ~como.carácter(nombre)) %>% addProviderTiles(proveedores$OpenStreetMap) |
El mapa se abre en un navegador:
Esto es todo. Espero que esto sea útil como primeros pasos en el uso de Couchbase desde R. ¡Feliz Análisis de Datos!
Para más información, visite
Referencia de la API REST de N1QL
R: El proyecto R para el cálculo estadístico
Folleto para R
Hola,
¿Cómo manejar si tengo varias URL para golpear n1ql.
Saludos
Hola Snehashis.
Cuando usas cualquier SDK de Couchbase como node.js, Java, .Net, etc, obtienes un mapa del cluster desde la conexión inicial, y el cliente sabe como balancear las peticiones a los nodos habilitados para la consulta.
Usando R, no tienes tal cliente, así que no hay "vista de cluster", y tienes que gestionar la dirección del servidor desde tu código. En resumen, tienes que elegir un nodo de consulta de tu clúster.