Hàm do người dùng định nghĩa và Thủ tục lưu trữ

Tự động hóa Data Pipeline trong Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

UDF là gì?

nanobanana: half: Hai biểu tượng ổ khóa trừu tượng đặt cạnh nhau, một mở một đóng, thiết kế phẳng tối giản, màu xanh navy và xanh lá DataCamp, nền trắng, không chữ

Hàm do người dùng định nghĩa (UDF)

  • Tùy biến ngoài các hàm SQL dựng sẵn
  • Viết bằng SQL, Python, Java, Scala hoặc JavaScript
  • Không DDL/DML — chỉ trả về giá trị
  • Chuẩn hoặc SECURE (ẩn logic với người gọi)
  • Trả về giá trị vô hướng mỗi hàng, hoặc một bảng
Tự động hóa Data Pipeline trong Snowflake

UDF bằng SQL

Điểm khởi đầu khuyến nghị

CREATE FUNCTION delivery_tier(days INT)
RETURNS VARCHAR AS $$
  CASE WHEN days <= 2 THEN 'Express'
       WHEN days <= 5 THEN 'Standard'
       ELSE 'Delayed' END $$;
Tự động hóa Data Pipeline trong Snowflake

UDF bằng Python & ngôn ngữ khác

Khi SQL không đáp ứng được

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]) $$;
Tự động hóa Data Pipeline trong Snowflake

UDF trong pipeline

 

 

mermaid: lớp biến đổi bằng UDF trong pipeline

UDF nằm ở lớp biến đổi - giữa lưu trữ thô và báo cáo

  • Gọi trong SELECT; trả về một giá trị mỗi hàng
  • Tập trung hóa logic nghiệp vụ dùng cho nhiều truy vấn
  • Thêm SECURE để ẩn định nghĩa khỏi người dùng khác
Tự động hóa Data Pipeline trong Snowflake

Thủ tục lưu trữ là gì?

  • Khai báo biến, lặp qua kết quả, xử lý lỗi
  • Thực thi DML trên nhiều bảng
  • Gọi độc lập với CALL

mermaid: datacamp-purple: luồng điều phối thủ tục lưu trữ

Tự động hóa Data Pipeline trong Snowflake

Thủ tục lưu trữ: 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
$$;
Tự động hóa Data Pipeline trong Snowflake

UDF so với Thủ tục lưu trữ

UDF Thủ tục lưu trữ
Gọi trong SELECT CALL
Trả về Một giá trị mỗi hàng Một giá trị duy nhất
Có thể thực thi DML Không
Ngôn ngữ SQL, Python, Java, JS SQL (Snowflake Scripting), Python, Java, JS, Scala
Dùng trong pipeline Biến đổi dữ liệu Điều phối logic
Tự động hóa Data Pipeline trong Snowflake

Ayo berlatih!

Tự động hóa Data Pipeline trong Snowflake

Preparing Video For Download...