Fungsi Window

Otomatisasi Data Pipeline di Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Apa itu Fungsi Window?

Hitung lintas baris tanpa menggabungkannya

  • Menghasilkan nilai per baris memakai himpunan di sekitarnya — window-nya
  • Berbeda dari GROUP BY: setiap baris masuk, setiap baris keluar
  • Ditetapkan oleh klausa OVER

3 kategori utama:

  • Peringkat: ROW_NUMBER(), RANK(), DENSE_RANK()
  • Agregasi: SUM(), AVG(), COUNT() with OVER()
  • Navigasi: LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()

Info lebih lanjut di kursus DataCamp Window Functions in Snowflake

Otomatisasi Data Pipeline di Snowflake

Klausa 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
Otomatisasi Data Pipeline di 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
Otomatisasi Data Pipeline di Snowflake

LAG dan LEAD

Input

Input SQL Lag dan Lead

Output

Output Lag dan Lead

Otomatisasi Data Pipeline di Snowflake

Total Berjalan dan Rata-Rata Bergulir

bingkai_jendela.png

Otomatisasi Data Pipeline di Snowflake

Bingkai ROWS vs RANGE

  • ROWS BETWEEN: menghitung posisi baris fisik — offset tepat terlepas dari nilai
-- ROWS: selalu memilih tepat N baris fisik sebelumnya
SUM(credits) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- Termasuk baris saat ini dan dua sebelumnya
  • RANGE BETWEEN: memakai nilai, mengelompokkan baris dengan nilai ORDER BY yang sama
-- RANGE: menyertakan semua baris yang seri pada nilai batas
SUM(credits) OVER (ORDER BY month RANGE BETWEEN 2 PRECEDING AND CURRENT ROW)

Gunakan Range hanya bila logika berbasis batas nilai

Otomatisasi Data Pipeline di Snowflake

Ayo berlatih!

Otomatisasi Data Pipeline di Snowflake

Preparing Video For Download...