Fungsi Buatan Pengguna dan Prosedur Tersimpan

Otomatisasi Data Pipeline di Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Apa itu UDF?

nanobanana: half: Dua ikon gembok abstrak berdampingan, satu terbuka dan satu tertutup, desain minimalis datar, warna biru dongker dan hijau DataCamp, latar putih, tanpa teks

Fungsi Buatan Pengguna (UDF)

  • Operasi kustom di luar fungsi SQL bawaan
  • Ditulis dalam SQL, Python, Java, Scala, atau JavaScript
  • Tanpa DDL/DML — hanya mengembalikan nilai
  • Standar atau SECURE (menyembunyikan logika dari pemanggil)
  • Mengembalikan nilai skalar per baris, atau tabel
Otomatisasi Data Pipeline di Snowflake

UDF SQL

Titik awal yang disarankan

CREATE FUNCTION delivery_tier(days INT)
RETURNS VARCHAR AS $$
  CASE WHEN days <= 2 THEN 'Express'
       WHEN days <= 5 THEN 'Standard'
       ELSE 'Delayed' END $$;
Otomatisasi Data Pipeline di Snowflake

UDF Python & Bahasa Lain

Saat SQL tidak cukup

CREATE FUNCTION parse_weight(label STRING)
RETURNS FLOAT LANGUAGE PYTHON
RUNTIME_VERSION = '3.9' HANDLER = 'parse'
AS $$ def parse(s): return float(s.split('kg')[0]) $$;
Otomatisasi Data Pipeline di Snowflake

UDF dalam Pipeline

 

 

mermaid: lapisan transformasi UDF dalam pipeline

UDF berada di lapisan transformasi — antara penyimpanan mentah dan pelaporan

  • Dipanggil di SELECT; mengembalikan satu nilai per baris
  • Memusatkan logika bisnis yang dipakai di banyak kueri
  • Tambahkan SECURE untuk menyembunyikan definisi dari pengguna lain
Otomatisasi Data Pipeline di Snowflake

Apa itu Prosedur Tersimpan?

  • Deklarasikan variabel, lakukan loop atas hasil, tangani error
  • Jalankan DML di banyak tabel
  • Dipanggil mandiri dengan CALL

mermaid: datacamp-ungu: alur orkestrasi prosedur tersimpan

Otomatisasi Data Pipeline di Snowflake

Prosedur Tersimpan: Snowflake Scripting

CREATE OR REPLACE PROCEDURE archive_old_shipments(cutoff INT)
RETURNS STRING LANGUAGE SQL AS $$
DECLARE                                    -- 1. Declare variables
    rows_moved INT DEFAULT 0;
BEGIN                                      -- 2. Begin the procedure
    INSERT INTO shipments_archive          -- 3. Execute SQL commands
        SELECT * FROM shipments WHERE delivery_days > :cutoff;
    rows_moved := SQLROWCOUNT;
    DELETE FROM shipments WHERE delivery_days > :cutoff;
    RETURN 'Archived ' || rows_moved       -- 4. Return the result
        || ' shipments.';
END;                                       -- 5. End the procedure
$$;
Otomatisasi Data Pipeline di Snowflake

UDF vs Prosedur Tersimpan

UDF Prosedur Tersimpan
Dipanggil di SELECT CALL
Mengembalikan Satu nilai per baris Satu nilai
Bisa Menjalankan DML Tidak Ya
Bahasa SQL, Python, Java, JS SQL (Snowflake Scripting), Python, Java, JS, Scala
Peran di Pipeline Transformasi Data Orkestrasi Logika
Otomatisasi Data Pipeline di Snowflake

Ayo berlatih!

Otomatisasi Data Pipeline di Snowflake

Preparing Video For Download...