Coautor: Till Westmann, Director de Ingeniería


En bits para Couchbase 6.5, la próxima versión de Couchbase Server, ya están disponibles. El servicio Analytics, que soporta un eficiente procesamiento paralelo de consultas, ha añadido soporte para las funciones de ventana definidas en la directiva sql:2003 estándar.

Para muchos de nosotros (incluido yo) las funciones ventana son una característica mágica que rara vez utilizamos. Pero las funciones ventana hacen que las consultas SQL sean más concisas, mejorando así la legibilidad, lo que facilita el mantenimiento de las consultas para las aplicaciones del mundo real. De otro modo, las consultas expresadas mediante funciones ventana implicarían costosas autouniones y subconsultas difíciles de optimizar, lo que daría lugar a consultas de ejecución lenta. Voy a ilustrar el punto mediante el cálculo de un total que es el ejemplo más práctico para el uso de funciones de ventana.Hay varias maneras de calcular un total en SQL. En esta entrada del blog, voy a calcular el total de dos maneras - la vieja escuela utilizando un INNER JOIN y las nuevas funciones de ventana disponibles en Couchbase 6.5.

¿Qué es un total móvil?

A Total actual es un total que se ajusta continuamente para tener en cuenta los elementos que se van añadiendo. También se denomina suma parcial. En el ejemplo siguiente, el total actual para una fecha de transacción sería el total actual del InvoiceID más el TransactionAmount actual.

 

Aunque arriba he calculado el RunningTotal, tenga en cuenta que los tres primeros campos son los datos de origen y que el RunningTotal debe calcularse mediante una consulta SQL.

Requisitos previos

Descargar Servidor Couchbase 6.5 y configurar un bucket de Couchbase para los datos de ejemplo para ejecutar las consultas en esta entrada del blog.  

Crea un bucket Couchbase llamado "invoices" con los datos que aparecen a continuación.

En la mesa de trabajo Analytics, ejecute la siguiente sentencia para crear el conjunto de datos

Consulta Inner Join para Running total en un día determinado

Para cada InvoiceID, necesitamos recuperar el importe de la transacción y todos los importes de transacciones anteriores. Esto se logra utilizando un Inner Join con una condición para obtener cada factura y las anteriores a ella.

JOINS y NoSQL no siempre se han llevado bien. De hecho, la sabiduría convencional es que los datos en el mundo NoSQL están desnormalizados para evitar JOINs. Pero Couchbase Analytics fue creado para la exploración de datos y el análisis ad-hoc que incluye uniones y agregaciones complejas. El motor de consulta de Analytics puede procesar JOINs que no son soportados por otros vendedores NoSQL. 

En caso de que te estés preguntando cómo Couchbase Analytics puede unir datos JSON, te recomiendo meterte bajo el capó en esto presentación en vídeo con el profesor Mike Carey, Arquitecto Jefe Consultor para Couchbase. 

Consulta de la función Ventana para el total de ejecución en un día determinado

Si no está familiarizado con las funciones de ventana, le recomiendo que lea Documentación de PostgresSQL que constituye una excelente introducción: 

"A función de ventana realiza un cálculo a través de un conjunto de filas de la tabla que están relacionadas de alguna manera con la fila actual. Esto es comparable al tipo de cálculo que puede realizarse con una función de agregación. Pero a diferencia de las funciones de agregación normales, el uso de una función de ventana no hace que las filas se agrupen en una única fila de salida: las filas conservan sus identidades separadas. Entre bastidores, la función ventana es capaz de acceder a algo más que la fila actual del resultado de la consulta."

Este es el aspecto de la consulta real -

Además de la sencillez y concisión, hay un par de cosas interesantes en la afirmación anterior -

  1.     Hay una función agregada pero no una cláusula group by. Normalmente, las funciones de agregación requieren una cláusula de agrupación, pero como estamos utilizando la cláusula OVER, SUM se considera una función de ventana.
  2.     La cláusula OVER recupera un conjunto específico de filas, relativas a la fila actual, y realiza una operación sobre un campo específico.
  3.     ORDER BY define el orden lógico en el que se evalúa la función ventana.

Nota: Couchbase soporta funciones de ventana tanto para el servicio de consultas como para el de análisis, y la misma consulta puede ejecutarse tanto en el servicio de consultas como en el de análisis. Para ejecutar en el servicio de consulta, es necesario crear los siguientes índices

El propósito de esta entrada de blog era introducir funciones de ventana en Couchbase Analytics. Las funciones ventana NO son nuevas en SQL, son parte del estándar SQL y están disponibles en las principales bases de datos relacionales y herramientas de Big Data como Hive y Spark. Con la versión 6.5, Couchbase las está llevando a las bases de datos documentales. Si quieres experimentar esto de primera mano - por favor descargar los bits y participa con nosotros en foros.

Recursos

Novedades de Couchbase Server 6.5

Todos los blogs de 6.5

Autor

Publicado por Sachin Smotra, Director de Gestión de Productos, Couchbase

La carrera de Sachin Smotra abarca más de 15 años construyendo productos de software a través de varios dominios incluyendo software Java Enterprise, Soluciones DRM para juegos móviles y conferencias web. Como Director de Gestión de Producto en Couchbase, es un líder de producto responsable de las líneas de producto Couchbase Mobile, IOT y Analytics, incluyendo la evangelización de la estrategia y visión del producto con clientes, socios, desarrolladores y analistas. Antes de unirse a Couchbase, Sachin fue Gerente Senior, Gestión de Producto, en Cisco WebEx, donde dirigió el equipo de producto responsable de transformar la experiencia del cliente de extremo a extremo a través del ciclo de vida del producto WebEx - consideración, compra, uso y renovaciones. Antes de su etapa en Cisco, Sachin trabajó en diferentes startups en multitud de puestos relacionados con la ingeniería, la arquitectura, la gestión de productos y las alianzas.

Dejar una respuesta