Funciones definidas por el usuario put para que usted tome las riendas a la hora de consultar y analizar sus datos.
En el ecosistema Couchbase, las funciones definidas por el usuario (UDF) son reutilizables y parametrizables. Consultas SQL que le permiten modularizar las consultas y aumentar la reutilización del código, a la vez que le proporcionan un mayor control sobre la forma en que una consulta concreta interactúa con su lógica empresarial.
Dicho esto, me complace anunciar que la versión 7.0 de Couchbase Server admite ahora las funciones definidas por el usuario (UDF) en el módulo Servicio de análisis.
Consulte la entrada del blog de ayer para más información sobre las funciones definidas por el usuario en el lenguaje de consulta SQL.
Funciones definidas por el usuario 101
Dentro de Couchbase Analytics, las funciones definidas por el usuario tienen dos partes:
- La firma de la función: La firma consiste en el nombre de la función más su número de parámetros. Una función puede tener cero, uno o varios parámetros. Cada función pertenece a una universo de datos (o Scope en terminología 7.0) y debe tener una firma única dentro de ese dataverse. Esto significa que usted podría crear dos funciones dentro del mismo dataverse que tienen el mismo nombre pero tienen un número diferente de parámetros. Como la firma de la función es distinta (nombre + número de parámetros), está permitido.
- Función Cuerpo: El cuerpo de una función puede ser una expresión o una subconsulta y puede hacer referencia a funciones existentes. conjuntos de datos o a otras funciones dentro del mismo dataverse o en un dataverse diferente.
He aquí dos ejemplos que muestran la firma de la función - mi_dataverso.ObtenerPedidos(...)
- y el cuerpo de la función (todo lo que hay entre las llaves):
1 2 3 4 5 |
CREAR O SUSTITUIR ANÁLISIS FUNCIÓN mi_dataverso.GetOrders(customer_id) { SELECCIONE o DESDE Pedidos AS o DONDE o.customer_id = customer_id } |
1 2 3 4 5 6 |
CREAR O SUSTITUIR ANÁLISIS FUNCIÓN mi_dataverso.GetOrders(customer_id, año) { SELECCIONE o DESDE Pedidos AS o DONDE o.customer_id = customer_id Y o.año = año } |
Si el CREAR FUNCIÓN DE ANÁLISIS
no proporciona un nombre de dataverse, entonces la función se crea dentro del dataverse activo. Si no se especifica un dataverse, la función se creará en el dataverse "Predeterminado".
Un dataverse puede proporcionarse a través de un USE <>
en la consulta o mediante una sentencia contexto_de_consulta
Parámetro de la API REST.
Antecedentes: Ámbitos y colecciones en Couchbase Analytics
Antes de mostrarte el ciclo de vida completo de una UDF de Couchbase Analytics, vamos a ponernos al día sobre un contexto importante.
El diagrama A representa un ejemplo de los datos que podría utilizar una empresa de viajes para gestionar las reservas aéreas y hoteleras.
En esta arquitectura, tenemos un Bucket llamado viaje
(similar a una base de datos relacional), que contiene un Ámbito llamado inventario
(similar a un esquema en un RDBMS), y cuatro colecciones denominadas aerolínea
, aeropuerto
, hotel
y ruta
(similares a las tablas de un RDBMS). Para cada una de estas colecciones, tenemos cuatro colecciones analíticas correspondientes (también conocidas como conjuntos de datos) y las organizamos dentro de la colección viajes.inventario
Ámbito (también conocido como dataverse).
Ejemplo de UDF con Couchbase Analytics
Para este ejemplo, supongamos que su equipo de análisis de datos necesita consultar con frecuencia qué aerolíneas de un país determinado vuelan más y cuáles son sus rangos percentiles.
A continuación se explica cómo las UDF ayudan a su equipo a completar estas consultas complejas.
Cómo gestionar sus UDF
Su primer paso es crear la función definida por el usuario en el Ámbito de Análisis (o dataverse) designado como viajes.inventario
.
A continuación se muestra la sentencia del Lenguaje de Definición de Datos (DDL) para crear una UDF que haga su consulta más sucinta:
1 2 3 4 5 6 7 8 9 10 |
CREAR O SUSTITUIR ANÁLISIS FUNCIÓN viaje.inventario.getAirlineRank(en_el_país) { SELECCIONE a.id, a.nombre AS aerolínea, cuente(r.id) AS recuento de rutas, RANGO_PORCENTAJE() EN (PEDIR POR cuente(r.id)) AS `rango` DESDE viaje.inventario.aerolínea a ÚNASE A viaje.inventario.ruta r EN a.id = r.airlineid DONDE a.país = en_el_país GRUPO POR a.id, a.nombre } |
La UDF anterior toma el parámetro en_el_país
como entrada para el nombre del país y lo utiliza como filtro para la consulta. A continuación, la consulta realiza un JOIN entre los campos aerolínea
y ruta
Colecciones y realiza agregaciones para cada línea aérea con el fin de:
- Contar el número de rutas aéreas
- Calcule el rango percentil de los recuentos de rutas utilizando la función
RANGO_PORCENTAJE
con la funciónEN
cláusula.
(El EN
recupera un conjunto específico de filas relativas a la fila actual y realiza una agregación sobre las filas id
campo. Más información sobre las funciones de ventana en esta entrada del blog.)
Cómo evaluar sus UDF
A continuación, vamos a probar tu nueva UDF.
La siguiente consulta determina las tres principales compañías aéreas de un país determinado ("Estados Unidos" en este ejemplo).
1 2 3 4 5 6 |
SELECCIONE ar.aerolínea como Línea aérea, RONDA(ar.rango*100,2) como Rango, ar.recuento de rutas como Recuento de rutas DESDE viaje.inventario.getAirlineRank("Estados Unidos Estados") ar PEDIR POR ar.recuento_de_rutas desc LÍMITE 3; |
El resultado de la evaluación de esta consulta muestra las tres compañías aéreas que vuelan con más rutas junto con sus clasificaciones percentiles:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[ { "Rango": 100, "RouteCount": 2354, "Aerolínea": "AMERICANO" }, { "Rango": 96.97, "RouteCount": 2180, "Aerolínea": "UNIDOS" }, { "Rango": 93.94, "RouteCount": 1981, "Aerolínea": "DELTA" } ] |
Cómo eliminar sus UDF
Una vez que ya no necesite su UDF, puede eliminarla utilizando la siguiente sentencia DDL:
1 |
DROP ANÁLISIS FUNCIÓN viaje.inventario.getAirlineRank(en_el_país) |
Fácil, ¿verdad?
Conclusión
Las funciones reutilizables definidas por el usuario son útiles para agilizar y modularizar tu código a la vez que proporcionan más flexibilidad a tu sistema. Espero que encuentres esta nueva funcionalidad UDF útil para tu trabajo con Couchbase Analytics.
Me encantaría conocer tus opiniones y comentarios a continuación sobre qué te parece la nueva función UDF y cómo la utilizas. O bien, inicie una conversación en el Foros de Couchbase. Espero sus noticias.
Pruebe Couchbase 7 hoy mismo