윈도우 함수

Snowflake 데이터 파이프라인 자동화

Emily Melhuish

Technical Curriculum Developer, Snowflake

윈도우 함수란?

행을 집계하지 않고 각 행별로 계산

  • 주변 행 집합(즉, 윈도우)을 사용해 행별 결과 계산
  • GROUP BY와 달리 입력 행마다 결과 행 유지
  • OVER 절로 정의

주요 3가지 유형:

  • 순위: ROW_NUMBER(), RANK(), DENSE_RANK()
  • 집계: SUM(), AVG(), COUNT() with OVER()
  • 탐색: LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()

DataCamp의 Window Functions in Snowflake 코스에서 자세한 내용 확인

Snowflake 데이터 파이프라인 자동화

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
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
Snowflake 데이터 파이프라인 자동화

LAG와 LEAD

입력

SQL LAG 및 LEAD 입력

출력

LAG 및 LEAD 출력

Snowflake 데이터 파이프라인 자동화

누적 합계와 이동 평균

window_frames.png

Snowflake 데이터 파이프라인 자동화

ROWS vs RANGE 프레임

  • ROWS BETWEEN: 물리적 행 위치를 기준으로 계산 — 값에 관계없이 정확한 오프셋 적용
-- ROWS: always picks exactly N preceding physical rows
SUM(credits) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- Includes current row and two preceding
  • RANGE BETWEEN: 값을 기준으로 ORDER BY 값이 동일한 행을 묶어서 처리
-- RANGE: includes all rows tied at the boundary value
SUM(credits) OVER (ORDER BY month RANGE BETWEEN 2 PRECEDING AND CURRENT ROW)

값 경계를 기준으로 처리할 때만 RANGE를 사용하세요

Snowflake 데이터 파이프라인 자동화

연습해 봅시다!

Snowflake 데이터 파이프라인 자동화

Preparing Video For Download...