如何在Snowpark Python DSL中调用已部署的Snowflake UDF?
Snowpark Python DSL调用已部署SQL UDF的实现方案
问题背景
已通过SQL创建并部署完成Python UDF,示例定义如下:
CREATE OR REPLACE FUNCTION dg_utility__field_contains_phone_number(str string, pre_clean boolean) RETURNS BOOLEAN LANGUAGE PYTHON RUNTIME_VERSION = 3.8 HANDLER = 'dg_utility__field_contains_phone_number' AS $$ .......udf stuff $$;
希望在Snowpark Python DSL中直接以类似df = df.withColumn(col, dg_utility__field_contains_phone_number(col))的方式调用该UDF,无需重新定义UDF,也不想通过session.sql生成动态SQL处理DataFrame。
解答
完全可以实现该需求,不需要在Snowpark程序中重新定义UDF,具体操作如下:
- 从Snowpark会话加载已部署的UDF
通过session.udf.get()方法直接获取已注册的UDF,无需重复编写UDF代码:
from snowflake.snowpark.functions import lit # 加载已部署的UDF dg_utility__field_contains_phone_number = session.udf.get("dg_utility__field_contains_phone_number")
- 在Snowpark DSL中直接调用
加载完成后,该UDF对象可像原生Snowpark函数一样在DataFrame操作中使用:
# 示例:传入目标列和布尔参数调用UDF df = df.withColumn("has_phone", dg_utility__field_contains_phone_number(df["target_column"], lit(True)))
这种方式实现了SQL与Python DSL之间的UDF共享,既避免了代码重复,也无需依赖动态SQL拼接,完全匹配需求。
内容的提问来源于stack exchange,提问作者Brutus35
相关产品推荐
相关产品推荐

