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

如何查看Snowflake任务调用的SQL存储过程输出内容

Snowflake任务调用SQL存储过程时,如何在任务历史中获取存储过程返回的输出内容

Snowflake原生任务运行历史(含控制台UI展示记录、TASK_HISTORY视图返回数据)默认只存任务执行状态、运行时长、报错信息、关联查询ID这类元数据,不会主动捕获、持久化被调用存储过程的RETURN返回值,所以直接翻任务历史看不到输出,可通过以下三种方案实现需求:

方案1:改造存储过程将输出写入自定义日志表(最推荐,适合长期留存场景)

这是生产环境最稳定的实现方式,不受结果留存周期限制,可随时回溯历史执行日志:

  • 第一步:创建专门的任务执行日志表,参考表结构:
CREATE OR REPLACE TABLE TASK_EXECUTION_LOG (
    TASK_NAME VARCHAR COMMENT '执行的任务名',
    EXEC_QUERY_ID VARCHAR COMMENT '任务执行对应的查询ID',
    EXEC_START_TIME TIMESTAMP_LTZ COMMENT '执行开始时间',
    EXEC_END_TIME TIMESTAMP_LTZ COMMENT '执行结束时间',
    PROC_OUTPUT VARIANT COMMENT '存储过程返回的日志/结果内容',
    ERROR_INFO VARCHAR COMMENT '执行报错信息(如果有)'
);
  • 第二步:改造原有SQL存储过程逻辑,在业务逻辑执行完成、执行RETURN返回结果前,将需要输出的内容、当前任务上下文信息插入到上述日志表中。可通过内置上下文函数自动获取当前任务信息:
    • CURRENT_TASK_NAME():获取当前运行的任务名称,非任务调用场景下返回空
    • LAST_QUERY_ID():获取当前执行上下文的查询ID
    • CURRENT_TIMESTAMP():获取当前时间
  • 如果不想修改原有存储过程的内部逻辑,也可以直接修改任务的定义语句,接住存储过程的返回值后写入日志表,示例任务定义:
CREATE OR REPLACE TASK MY_TASK
    WAREHOUSE = MY_WH
    SCHEDULE = '1 HOUR'
AS
BEGIN
    -- 调用存储过程并接住返回值
    LET proc_result VARIANT := CALL MY_SQL_PROC();
    -- 将返回值写入日志表
    INSERT INTO TASK_EXECUTION_LOG
    SELECT
        CURRENT_TASK_NAME(),
        LAST_QUERY_ID(),
        DATEADD(SECOND, -1, CURRENT_TIMESTAMP()),
        CURRENT_TIMESTAMP(),
        :proc_result,
        NULL;
END;

后续需要查看输出时,直接查询TASK_EXECUTION_LOG表即可,还可以按需给日志表加时间分区、检索字段优化查询效率。

方案2:通过任务关联的查询ID临时读取返回结果(适合临时排查场景)

如果不想改造现有任务和存储过程,只是临时需要查看近期某次执行的输出,可以利用Snowflake的查询结果留存机制获取:

  • 第一步:打开Snowflake控制台的任务运行历史,或者查询TASK_HISTORY表函数,找到对应执行记录的QUERY_ID字段值
  • 第二步:使用RESULT_SCAN函数直接读取该查询对应的返回结果(任务执行CALL 存储过程()语句的返回值就是存储过程的RETURN内容),示例代码:
-- 将单引号内的内容替换为你查到的实际QUERY_ID
SELECT * FROM TABLE(RESULT_SCAN('01acb123-0000-1234-0000-123456abcdef'));

注意:该方案有有效期限制,Snowflake默认会保留查询结果24小时,更长留存周期取决于账号版本和参数配置,超过留存期后查询结果会被永久清理,无法再通过该方式获取。

方案3:通过任务通知推送输出内容(适合实时获取场景)

如果需要在任务执行完成后第一时间拿到存储过程输出,可以给任务配置通知集成:

  • 先创建对应云平台的通知集成(支持AWS SNS、Azure Event Grid、Google Pub/Sub)
  • 改造任务逻辑,在存储过程执行完成后,将返回值作为消息体通过SYSTEM$SEND_SNOWFLAKE_NOTIFICATION等内置存储过程发送到通知渠道
  • 该方案适合实时告警、触发下游流程的场景,不适合长期回溯历史输出。

补充说明:截止当前Snowflake产品版本,没有原生配置项可以让任务历史直接展示存储过程返回值,所有需要留存输出的场景都需要主动做结果持久化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:21:47