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. 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
$$;
| UDF | 存储过程 | |
|---|---|---|
| 调用于 | SELECT |
CALL |
| 返回 | 每行一个值 | 单个值 |
| 可执行 DML | 否 | 是 |
| 语言 | SQL、Python、Java、JS | SQL(Snowflake Scripting)、Python、Java、JS、Scala |
| 在管道中的作用 | 转换数据 | 编排逻辑 |
Snowflake 中的数据管道自动化