Window Functions

Automatisierung von Datenpipelines in Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Was ist eine Window Function?

Über Zeilen rechnen, ohne sie zu verdichten

  • Liefert pro Zeile ein Ergebnis auf Basis einer Umgebung — dem Fenster
  • Anders als GROUP BY: jede Zeile rein, jede Zeile raus
  • Definiert durch die OVER-Klausel

3 Hauptkategorien:

  • Ranking: ROW_NUMBER(), RANK(), DENSE_RANK()
  • Aggregation: SUM(), AVG(), COUNT() with OVER()
  • Navigation: LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()

Mehr Infos im DataCamp-Kurs Window Functions in Snowflake

Automatisierung von Datenpipelines in Snowflake

Die OVER()-Klausel

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
Automatisierung von Datenpipelines in 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
Automatisierung von Datenpipelines in Snowflake

LAG und LEAD

Input

SQL Lag und Lead Eingabe

Output

Lag und Lead Ausgabe

Automatisierung von Datenpipelines in Snowflake

Laufende Summen und gleitende Mittelwerte

Fensterrahmen

Automatisierung von Datenpipelines in Snowflake

ROWS- vs. RANGE-Frames

  • ROWS BETWEEN: zählt physische Zeilenpositionen – exakte Offsets, unabhängig vom Wert
-- ROWS: nimmt immer genau N vorherige physische Zeilen
SUM(credits) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- Enthält aktuelle Zeile und zwei vorherige
  • RANGE BETWEEN: nutzt Werte, gruppiert Zeilen mit gleichen ORDER BY-Werten
-- RANGE: nimmt alle Zeilen mit dem Grenzwert (Ties) auf
SUM(credits) OVER (ORDER BY month RANGE BETWEEN 2 PRECEDING AND CURRENT ROW)

Nutze RANGE nur, wenn die Logik Wertgrenzen betrifft

Automatisierung von Datenpipelines in Snowflake

Lass uns üben!

Automatisierung von Datenpipelines in Snowflake

Preparing Video For Download...