Користувацькі функції та збережені процедури

Автоматизація конвеєрів даних у Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Що таке UDF?

nanobanana: half: Два абстрактні значки замка поруч, один відкритий, інший закритий, плаский мінімалістичний дизайн, темно-синій і зелений кольори DataCamp, білий фон, без тексту

Користувацькі функції (UDF)

  • Кастомні операції понад вбудовані SQL-функції
  • Пишуться на SQL, Python, Java, Scala або JavaScript
  • Немає DDL чи DML — лише повертають значення
  • Стандартні або SECURE (приховують логіку від викликачів)
  • Повертають скаляр на рядок або таблицю
Автоматизація конвеєрів даних у Snowflake

SQL UDF

Рекомендована відправна точка

CREATE FUNCTION delivery_tier(days INT)
RETURNS VARCHAR AS $$
  CASE WHEN days <= 2 THEN 'Express'
       WHEN days <= 5 THEN 'Standard'
       ELSE 'Delayed' END $$;
Автоматизація конвеєрів даних у Snowflake

UDF на Python та інших мовах

Коли SQL не справляється

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]) $$;
Автоматизація конвеєрів даних у Snowflake

UDF у конвеєрі

 

 

mermaid: шар трансформації UDF у конвеєрі

UDF розташовані в шарі трансформації — між сирим сховищем і звітністю

  • Викликаються в SELECT; повертають одне значення на рядок
  • Централізують бізнес-логіку для багатьох запитів
  • Додайте SECURE, щоб приховати визначення від інших користувачів
Автоматизація конвеєрів даних у Snowflake

Що таке збережена процедура?

  • Оголошуйте змінні, ітеруйте результати, обробляйте помилки
  • Виконуйте DML над кількома таблицями
  • Викликаються окремо через CALL

mermaid: datacamp-purple: схема оркестрації збереженої процедури

Автоматизація конвеєрів даних у Snowflake

Збережена процедура: 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
$$;
Автоматизація конвеєрів даних у Snowflake

UDF проти збережених процедур

UDF Збережена процедура
Виклик у SELECT CALL
Повертає Одне значення на рядок Одне значення
Може виконувати DML Ні Так
Мови SQL, Python, Java, JS SQL (Snowflake Scripting), Python, Java, JS, Scala
Використання в конвеєрі Трансформація даних Оркестрація логіки
Автоматизація конвеєрів даних у Snowflake

¡Vamos a practicar!

Автоматизація конвеєрів даних у Snowflake

Preparing Video For Download...