ฟังก์ชันที่ผู้ใช้กำหนดและ Stored Procedures

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

UDF คืออะไร?

nanobanana: half: ไอคอนแม่กุญแจนามธรรมสองอันวางเคียงกัน อันเปิดและอันปิด ดีไซน์แบน DataCamp สีกรมท่าและเขียว พื้นหลังขาว ไม่มีข้อความ

User-Defined Functions

  • การดำเนินการที่กำหนดเองเกินกว่าฟังก์ชัน SQL ในตัว
  • เขียนด้วย SQL, Python, Java, Scala หรือ JavaScript
  • ไม่มี DDL หรือ DML — คืนค่าเท่านั้น
  • แบบปกติหรือ SECURE (ซ่อนลอจิกจากผู้เรียกใช้)
  • คืนค่า scalar ต่อแถว หรือเป็นตาราง
การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

SQL UDFs

จุดเริ่มต้นที่แนะนำ

CREATE FUNCTION delivery_tier(days INT)
RETURNS VARCHAR AS $$
  CASE WHEN days <= 2 THEN 'Express'
       WHEN days <= 5 THEN 'Standard'
       ELSE 'Delayed' END $$;
การทำให้ Data Pipeline เป็นอัตโนมัติใน 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]) $$;
การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

UDF ใน Pipeline

 

 

mermaid: pipeline ของ transformation layer สำหรับ UDF

UDF อยู่ใน transformation layer — ระหว่างที่จัดเก็บข้อมูลและการรายงาน

  • เรียกใช้ใน SELECT; คืนค่าหนึ่งค่าต่อแถว
  • รวมศูนย์ business logic ที่ใช้ร่วมกันหลาย query
  • เพิ่ม SECURE เพื่อซ่อน definition จากผู้ใช้อื่น
การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Stored Procedure คืออะไร?

  • ประกาศตัวแปร วนลูปผลลัพธ์ จัดการข้อผิดพลาด
  • รัน DML ข้ามหลายตาราง
  • เรียกใช้แบบ standalone ด้วย CALL

mermaid: datacamp-purple: ขั้นตอนการทำงานของ stored procedure

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Stored Procedure: 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
$$;
การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

UDF vs Stored Procedure

UDF Stored Procedure
เรียกใช้ใน SELECT CALL
คืนค่า ค่าเดียวต่อแถว ค่าเดียว
รัน DML ได้ ไม่ได้ ได้
ภาษา SQL, Python, Java, JS SQL (Snowflake Scripting), Python, Java, JS, Scala
ใช้ใน Pipeline แปลงข้อมูล จัดการลอจิก
การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

ฝึกกันเลย!

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Preparing Video For Download...