Consulta SQL++ / N1QL

A la par con las funciones de ventana.

Utilice la analogía del golf cuando explique a los ejecutivos.
Utiliza una analogía automovilística para todos los demás. - Confucio.

El propósito de las funciones de ventana es traducir los requisitos de los informes empresariales de forma declarativa y eficaz a SQL, de modo que el rendimiento de las consultas y la eficiencia del desarrollador/analista empresarial mejoren drásticamente. He visto informes y cuadros de mando del mundo real pasar de horas a minutos, de minutos a segundos después de utilizar funciones de ventana. El tamaño de las consultas disminuye de 40 páginas a unas pocas. En los años 90, la base de datos Redbrick comprendió realmente el caso de uso empresarial y creó una nueva capa de funcionalidad para realizar informes empresariales que incluían clasificaciones, totales de ejecución, cálculo de comisiones e inventario basados en subgrupos, posiciones, etc. Estos han estado en SQL estándar en 2003. Cada capa de BI (como Tableau, Looker, Cognos) explota esta funcionalidad.

Introducción a las funciones de ventana

Imagina que tienes las puntuaciones de seis golfistas a lo largo de dos rondas. Ahora, necesitas crear la tabla de clasificación y clasificarlos. Clasifíquelos utilizando SQL.

Jugador Ronda 1 Ronda2
Marco 75 73
Johan 72 68
Chang 67 76
Isha 74 71
Sitaram 68 72
Bingjie 71 67

Inserte los datos en Couchbase.

SIN funciones de ventana (estado actual - Couchbase 6.0)

Para escribir la consulta sin utilizar funciones de ventana, se necesita una subconsulta para calcular la clasificación de cada jugador. Esta subconsulta tiene que escanear todos los datos resultando la peor complejidad algorítmica de O(N^2), lo que aumenta drásticamente el tiempo de ejecución y el rendimiento.

Con funciones de ventana en Mad-Hatter (próxima versión)

Esta consulta devuelve jugador, total después de dos rondas (T), cómo de la puntuación es sobre / bajo par (ToPar) y luego clasifica basándose en las puntuaciones de las dos primeras rondas. Esta es la NUEVA funcionalidad de Mad-Hatter. La complejidad temporal de esto es O(N), lo que significa que el tiempo de ejecución sólo aumentará linealmente.  

Observaciones:

  1. La consulta expresa los requisitos de forma sencilla y clara.
  2. El rendimiento de esta consulta en un escenario real es mucho mejor. Tenemos previsto medir.
  3. Cuando los requisitos de clasificación dependen de varios documentos, la consulta se vuelve bastante compleja de escribir, optimizar y ejecutar.
  4. Todo ello afecta al coste total de propiedad.

Ahora, vamos a crear un cuadro de mandos ampliado.

Mostrar añadir denso rango, número de fila, que está por delante, y el número de golpes detrás del líder. Todas cosas muy comunes en una resituación de reporte. Estás viendo la nueva función de ventana cada vez que ves la cláusula OVER(). La consulta de abajo tiene seis funciones ventana.

Como has visto antes, haciendo esta consulta con seis funciones de ventana mediante método de subconsulta será una consulta de mayor esfuerzo, costosa y propensa a errores.

Además de convertir los agregados incorporados (COUNT, SUM, AVG, etc) en funciones ventana, Sitaram ha añadido las siguientes funciones ventana. La sintaxis y la semántica de cada una de ellas están bien definidas en la norma y bien descritas en los artículos de la sección de referencia que figura a continuación.

RANGO()
DENSE_RANK()
PERCENT_RANK()
CUME_DIST()
NTILE()
RATIO_TO_REPORT()
ROW_NUMBER()
LAG()
PRIMER_VALOR()
ÚLTIMO_VALOR()
NTH_VALUE()
LEAD()

Referencias:

  1. Probablemente la función SQL más interesante: Funciones de ventana. https://blog.jooq.org/2013/11/03/probably-the-coolest-sql-feature-window-functions/
  2. Una ventana al mundo de las funciones analíticas. https://blogs.oracle.com/oraclemagazine/a-window-into-the-world-of-analytic-functions
  3. Referencia Oracle: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174
Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Keshav Murthy

Keshav Murthy es Vicepresidente de Couchbase R&D. Anteriormente, estuvo en MapR, IBM, Informix, Sybase, con más de 20 años de experiencia en diseño y desarrollo de bases de datos. Dirigió el equipo de I+D de SQL y NoSQL en IBM Informix. Ha recibido dos premios President's Club en Couchbase y dos premios Outstanding Technical Achievement en IBM. Keshav es licenciado en Informática e Ingeniería por la Universidad de Mysore (India), es titular de diez patentes estadounidenses y tiene tres pendientes.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.