Funções de janela

Automação de Pipelines de Dados no Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

O que é uma função de janela?

Calcule entre linhas sem colapsá-las

  • Calcula um resultado por linha usando um conjunto ao redor — sua janela
  • Diferente de GROUP BY: entra uma linha, sai uma linha
  • Definido pela cláusula OVER

3 categorias principais:

  • Ranqueamento: ROW_NUMBER(), RANK(), DENSE_RANK()
  • Agregação: SUM(), AVG(), COUNT() with OVER()
  • Navegação: LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()

Mais info no curso da DataCamp Window Functions in Snowflake

Automação de Pipelines de Dados no Snowflake

A 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
Automação de Pipelines de Dados no 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
Automação de Pipelines de Dados no Snowflake

LAG e LEAD

Entrada

Entrada de SQL Lag e Lead

Saída

Saída de Lag e Lead

Automação de Pipelines de Dados no Snowflake

Acumulados e médias móveis

quadros_de_janela.png

Automação de Pipelines de Dados no Snowflake

Quadros ROWS vs RANGE

  • ROWS BETWEEN: conta posições físicas de linhas — deslocamentos exatos, independente do valor
-- ROWS: sempre pega exatamente N linhas físicas anteriores
SUM(credits) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- Inclui a linha atual e duas anteriores
  • RANGE BETWEEN: usa valores, agrupa linhas com valores do ORDER BY iguais
-- RANGE: inclui todas as linhas empatadas no valor limite
SUM(credits) OVER (ORDER BY month RANGE BETWEEN 2 PRECEDING AND CURRENT ROW)

Use RANGE só quando a lógica for sobre limites de valor

Automação de Pipelines de Dados no Snowflake

Vamos praticar!

Automação de Pipelines de Dados no Snowflake

Preparing Video For Download...