Las funciones de ventana (o window functions) en SQL son una poderosa herramienta que permite realizar cálculos sobre un conjunto de filas relacionadas con la fila actual. A diferencia de las funciones de agregación estándar, las funciones de ventana no agrupan los resultados en una sola fila, sino que mantienen el contexto de cada fila individual.
Conceptos Clave
- Partición: Divide el conjunto de resultados en subconjuntos. Las funciones de ventana se aplican a cada partición por separado.
- Orden: Define el orden en el que se procesan las filas dentro de cada partición.
- Frame: Especifica un subconjunto de filas dentro de la partición que se utilizará para la función de ventana.
Sintaxis Básica
<función_de_ventana> OVER ( [PARTITION BY <expresiones_de_partición>] [ORDER BY <expresiones_de_orden>] [<frame_clause>] )
Ejemplo de Sintaxis
SUM(sales) OVER ( PARTITION BY region ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW ) AS running_total
Tipos Comunes de Funciones de Ventana
- Funciones de Agregación:
SUM()
,AVG()
,MIN()
,MAX()
,COUNT()
- Funciones de Rango:
RANK()
,DENSE_RANK()
,ROW_NUMBER()
- Funciones de Valor:
FIRST_VALUE()
,LAST_VALUE()
,NTH_VALUE()
Ejemplos Prácticos
- Cálculo de Suma Acumulativa
SELECT date, sales, SUM(sales) OVER ( ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS cumulative_sales FROM sales_data ORDER BY date;
Explicación: Esta consulta calcula la suma acumulativa de las ventas ordenadas por fecha.
- Cálculo de Rango
SELECT employee_id, department, salary, RANK() OVER ( PARTITION BY department ORDER BY salary DESC ) AS salary_rank FROM employee_data;
Explicación: Esta consulta asigna un rango a cada empleado dentro de su departamento basado en su salario, en orden descendente.
- Valor de la Primera Fila en una Partición
SELECT employee_id, department, salary, FIRST_VALUE(salary) OVER ( PARTITION BY department ORDER BY hire_date ) AS first_salary FROM employee_data;
Explicación: Esta consulta obtiene el salario del primer empleado contratado en cada departamento.
Ejercicio Práctico
Ejercicio 1: Suma Acumulativa de Ventas
Instrucciones: Utiliza la tabla sales_data
para calcular la suma acumulativa de las ventas por región y fecha.
SELECT region, date, sales, SUM(sales) OVER ( PARTITION BY region ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS cumulative_sales FROM sales_data ORDER BY region, date;
Ejercicio 2: Rango de Salarios
Instrucciones: Utiliza la tabla employee_data
para calcular el rango de salarios dentro de cada departamento.
SELECT employee_id, department, salary, RANK() OVER ( PARTITION BY department ORDER BY salary DESC ) AS salary_rank FROM employee_data;
Soluciones
Solución al Ejercicio 1
SELECT region, date, sales, SUM(sales) OVER ( PARTITION BY region ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS cumulative_sales FROM sales_data ORDER BY region, date;
Solución al Ejercicio 2
SELECT employee_id, department, salary, RANK() OVER ( PARTITION BY department ORDER BY salary DESC ) AS salary_rank FROM employee_data;
Conclusión
Las funciones de ventana en BigQuery permiten realizar cálculos avanzados y análisis detallados sin perder el contexto de cada fila individual. Al dominar estas funciones, puedes realizar análisis más complejos y obtener insights más profundos de tus datos. En el siguiente módulo, exploraremos los Joins Avanzados, que te permitirán combinar datos de múltiples tablas de manera eficiente.
Curso de BigQuery
Módulo 1: Introducción a BigQuery
- ¿Qué es BigQuery?
- Configuración de tu Entorno de BigQuery
- Entendiendo la Arquitectura de BigQuery
- Visión General de la Consola de BigQuery
Módulo 2: SQL Básico en BigQuery
Módulo 3: SQL Intermedio en BigQuery
Módulo 4: SQL Avanzado en BigQuery
- Joins Avanzados
- Campos Anidados y Repetidos
- Funciones Definidas por el Usuario (UDFs)
- Particionamiento y Agrupamiento
Módulo 5: Gestión de Datos en BigQuery
- Cargando Datos en BigQuery
- Exportando Datos desde BigQuery
- Transformación y Limpieza de Datos
- Gestión de Conjuntos de Datos y Tablas
Módulo 6: Optimización del Rendimiento de BigQuery
- Técnicas de Optimización de Consultas
- Entendiendo los Planes de Ejecución de Consultas
- Uso de Vistas Materializadas
- Optimización del Almacenamiento
Módulo 7: Seguridad y Cumplimiento en BigQuery
- Control de Acceso y Permisos
- Encriptación de Datos
- Auditoría y Monitoreo
- Cumplimiento y Mejores Prácticas
Módulo 8: Integración y Automatización de BigQuery
- Integración con Servicios de Google Cloud
- Uso de BigQuery con Dataflow
- Automatización de Flujos de Trabajo con Cloud Functions
- Programación de Consultas con Cloud Scheduler
Módulo 9: Machine Learning en BigQuery (BQML)
- Introducción a BigQuery ML
- Creación y Entrenamiento de Modelos
- Evaluación y Predicción con Modelos
- Características Avanzadas de BQML