在 Snowflake 進行資料管線自動化
Emily Melhuish
Technical Curriculum Developer, Snowflake
![]()
使用者自訂函式(UDF)
建議的起手式
CREATE FUNCTION delivery_tier(days INT)
RETURNS VARCHAR AS $$
CASE WHEN days <= 2 THEN 'Express'
WHEN days <= 5 THEN 'Standard'
ELSE 'Delayed' END $$;
當 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]) $$;

UDF 位於轉換層——介於原始儲存與報表之間
SELECT 中呼叫;每列回傳一個值SECURE 可對其他使用者隱藏定義CALL 獨立呼叫
CREATE OR REPLACE PROCEDURE archive_old_shipments(cutoff INT)
RETURNS STRING LANGUAGE SQL AS $$
DECLARE -- 1. 宣告變數
rows_moved INT DEFAULT 0;
BEGIN -- 2. 開始程序
INSERT INTO shipments_archive -- 3. 執行 SQL 指令
SELECT * FROM shipments WHERE delivery_days > :cutoff;
rows_moved := SQLROWCOUNT;
DELETE FROM shipments WHERE delivery_days > :cutoff;
RETURN 'Archived ' || rows_moved -- 4. 回傳結果
|| ' shipments.';
END; -- 5. 結束程序
$$;
| UDF | 儲存過程 | |
|---|---|---|
| 呼叫位置 | SELECT |
CALL |
| 回傳 | 每列一個值 | 單一值 |
| 可執行 DML | 否 | 是 |
| 語言 | SQL、Python、Java、JS | SQL(Snowflake Scripting)、Python、Java、JS、Scala |
| 管線中用途 | 轉換資料 | 協調邏輯 |
在 Snowflake 進行資料管線自動化