Funkcje definiowane przez użytkownika i procedury składowane

Automatyzacja potoków danych w Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Czym jest UDF?

nanobanana: half: Dwie abstrakcyjne ikony kłódek obok siebie, jedna otwarta i jedna zamknięta, płaski minimalistyczny styl, kolory DataCamp navy i zielony, białe tło, bez tekstu

Funkcje definiowane przez użytkownika

  • Operacje wykraczające poza wbudowane funkcje SQL
  • Pisane w SQL, Python, Java, Scala lub JavaScript
  • Brak DDL ani DML — zwracają wyłącznie wartości
  • Standardowe lub SECURE (ukrywa logikę przed wywołującymi)
  • Zwracają wartość skalarną na wiersz lub tabelę
Automatyzacja potoków danych w Snowflake

UDF w SQL

Zalecany punkt wyjścia

CREATE FUNCTION delivery_tier(days INT)
RETURNS VARCHAR AS $$
  CASE WHEN days <= 2 THEN 'Express'
       WHEN days <= 5 THEN 'Standard'
       ELSE 'Delayed' END $$;
Automatyzacja potoków danych w Snowflake

UDF w Pythonie i innych językach programowania

Gdy SQL nie wystarczy

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]) $$;
Automatyzacja potoków danych w Snowflake

UDF w potoku danych

 

 

mermaid: potok warstwy transformacji UDF

UDF działają w warstwie transformacji — między surowym magazynem danych a raportowaniem

  • Wywoływane w SELECT; zwracają jedną wartość na wiersz
  • Centralizują logikę biznesową używaną w wielu zapytaniach
  • Dodaj SECURE, aby ukryć definicję przed innymi użytkownikami
Automatyzacja potoków danych w Snowflake

Czym jest procedura składowana?

  • Deklarowanie zmiennych, iterowanie po wynikach, obsługa błędów
  • Wykonywanie operacji DML na wielu tabelach
  • Wywoływane za pomocą CALL

mermaid: datacamp-purple: przepływ orkiestracji procedury składowanej

Automatyzacja potoków danych w Snowflake

Procedura składowana: 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
$$;
Automatyzacja potoków danych w Snowflake

UDF a procedury składowane

UDF Procedura składowana
Wywoływana w SELECT CALL
Zwraca Jedną wartość na wiersz Pojedynczą wartość
Może wykonywać DML Nie Tak
Języki SQL, Python, Java, JS SQL (Snowflake Scripting), Python, Java, JS, Scala
Zastosowanie w potoku Transformacja danych Orkiestracja logiki
Automatyzacja potoków danych w Snowflake

Czas na ćwiczenia!

Automatyzacja potoków danych w Snowflake

Preparing Video For Download...