You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中从一个Python UDF调用另一个Python UDF?

解决Snowflake Python UDF中调用其他UDF的问题

问题背景

你在Snowflake中创建了RETRIEVE_GCHAT_WEBHOOK_URL__BI_NOTIFICATION Python UDF,试图在另一个发送通知的UDFsend_gchat_message中直接调用它时触发NameError;尝试用Snowpark方式获取结果又遇到ModuleNotFoundError,以下是两种可行的解决办法:


方案一:将目标UDF结果作为参数传入(推荐)

Snowflake的Python UDF无法直接在内部调用其他UDF,最简洁的方式是把RETRIEVE_GCHAT_WEBHOOK_URL__BI_NOTIFICATION()的执行结果作为参数传递给发送消息的UDF:

USE WAREHOUSE BI_ELT_WH;
USE DATABASE BI_ELT;
USE SCHEMA INTEGRATIONS;

CREATE OR REPLACE FUNCTION send_gchat_message(message string, webhook_url string)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
PACKAGES = ('requests')
HANDLER = 'send_gchat_message'
AS
$$
import requests

def send_gchat_message(message, webhook_url):
    requests.post(webhook_url, json={'text': message})
    return 'Done.'
  
$$;

-- 调用时传入目标UDF的执行结果
SELECT send_gchat_message('This is a test message!', RETRIEVE_GCHAT_WEBHOOK_URL__BI_NOTIFICATION());

方案二:在UDF内部通过Snowpark调用SQL(需添加依赖)

如果必须在UDF内部获取Webhook URL,需要添加snowflake-snowpark-python依赖包,通过活动会话执行SQL查询获取目标UDF的结果,注意要指定UDF的完整路径(数据库.模式.UDF名称):

USE WAREHOUSE BI_ELT_WH;
USE DATABASE BI_ELT;
USE SCHEMA INTEGRATIONS;

CREATE OR REPLACE FUNCTION send_gchat_message(message string)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
PACKAGES = ('requests', 'snowflake-snowpark-python')
HANDLER = 'send_gchat_message'
AS
$$
import requests
from snowflake.snowpark.context import get_active_session

def send_gchat_message(message):
    session = get_active_session()
    # 执行SQL获取UDF结果,注意匹配UDF的实际大小写(Snowflake默认不区分大小写)
    query_result = session.sql("SELECT BI_ELT.INTEGRATIONS.RETRIEVE_GCHAT_WEBHOOK_URL__BI_NOTIFICATION()").collect()
    target_url = query_result[0][0]
    requests.post(target_url, json={'text': message})
    return 'Done.'
  
$$;

SELECT send_gchat_message('This is a test message!');

注意事项

  • 方案一无需额外依赖,性能更优,是首选方案。
  • 方案二会引入Snowpark包,增加UDF的启动开销,仅适合必须在UDF内部获取URL的场景。
  • 确保当前用户拥有调用RETRIEVE_GCHAT_WEBHOOK_URL__BI_NOTIFICATION UDF的权限。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:54:54