Funciones de ventana

Automatización de canalizaciones de datos en Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

¿Qué es una función de ventana?

Calcula entre filas sin colapsarlas

  • Calcula un resultado por fila usando un conjunto cercano: su ventana
  • A diferencia de GROUP BY: entra cada fila, sale cada fila
  • Lo define la cláusula OVER

3 categorías principales:

  • Ranking: ROW_NUMBER(), RANK(), DENSE_RANK()
  • Agregación: SUM(), AVG(), COUNT() con OVER()
  • Navegación: LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()

Más info en el curso de DataCamp Window Functions in Snowflake

Automatización de canalizaciones de datos en Snowflake

La cláusula OVER()

SELECT shipment_id
, region
, delivery_days
, AVG(delivery_days) 
    OVER ( PARTITION BY region ORDER BY dispatched_at ) AS avg_days_in_region 
FROM shipments;
SHIPMENT_ID REGION DELIVERY_DAYS RUNNING_AVG_DAYS_IN_REGION
SHP-001 EMEA 3 3.00
SHP-002 EMEA 5 4.00
SHP-003 EMEA 4 4.00
SHP-004 APAC 6 6.00
Automatización de canalizaciones de datos en Snowflake

ROW_NUMBER vs RANK vs DENSE_RANK

SELECT
    shipment_id AS shipment, delivery_days AS days,
    ROW_NUMBER() OVER (ORDER BY delivery_days) AS row_number,
    RANK()       OVER (ORDER BY delivery_days) AS rank,
    DENSE_RANK() OVER (ORDER BY delivery_days) AS dense_rank
FROM shipments ORDER BY delivery_days;
SHIPMENT DELIVERY_DAYS ROW_NUMBER RANK DENSE_RANK
SHP-001 3 1 1 1
SHP-002 5 2 2 2
SHP-003 5 3 2 2
SHP-004 7 4 4 3
Automatización de canalizaciones de datos en Snowflake

LAG y LEAD

Entrada

Entrada de SQL Lag y Lead

Salida

Salida de Lag y Lead

Automatización de canalizaciones de datos en Snowflake

Acumulados y medias móviles

marcos_de_ventana.png

Automatización de canalizaciones de datos en Snowflake

Marcos ROWS vs RANGE

  • ROWS BETWEEN: cuenta posiciones físicas — desplazamientos exactos sin importar el valor
-- ROWS: siempre toma exactamente N filas físicas anteriores
SUM(credits) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- Incluye la fila actual y dos anteriores
  • RANGE BETWEEN: usa valores, agrupa filas con valores de ORDER BY iguales
-- RANGE: incluye todas las filas empatadas en el valor límite
SUM(credits) OVER (ORDER BY month RANGE BETWEEN 2 PRECEDING AND CURRENT ROW)

Usa RANGE solo cuando tu lógica dependa de límites de valor

Automatización de canalizaciones de datos en Snowflake

¡Vamos a practicar!

Automatización de canalizaciones de datos en Snowflake

Preparing Video For Download...