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

运行JavaScript存储过程时如何通过QUERY_HISTORY获取关联子SQL

结论

完全可以通过QUERY_HISTORY视图实现你提出的两个查询需求,具体实现逻辑和需要用到的关联属性如下:

1. 定位存储过程调用运行记录

筛选存储过程主调用记录的核心判断字段如下:

  • QUERY_TYPE:值固定为CALL的记录就是存储过程的主调用记录
  • QUERY_TEXT:可以配合模糊匹配你要找的存储过程名称,缩小筛选范围
  • START_TIME、SESSION_ID:可以按需补充时间范围、会话维度过滤条件,定位特定场景下的存储过程调用记录

2. 关联存储过程主调用与内部子SQL的核心属性

只需要两个属性即可完成主调用和子SQL的关联匹配:

  • SESSION_ID:同一个存储过程的主调用和它内部执行的所有子SQL必然属于同一会话,该字段值完全一致
  • PARENT_QUERY_ID:存储过程内部执行的每一条子SQL的PARENT_QUERY_ID,刚好等于该存储过程主调用记录的QUERY_ID

关联查询示例SQL

-- 先筛选出目标存储过程的主调用记录
WITH sp_main_calls AS (
    SELECT 
        QUERY_ID AS sp_query_id,
        QUERY_TEXT AS sp_call_text,
        START_TIME AS sp_start_time,
        SESSION_ID
    FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
    WHERE 
        QUERY_TYPE = 'CALL'
        AND QUERY_TEXT ILIKE '%YOUR_STORED_PROCEDURE_NAME%'
        -- 可按需补充时间范围过滤
        AND START_TIME >= DATEADD('day', -7, CURRENT_TIMESTAMP())
)
-- 关联查询对应子SQL
SELECT 
    sp.sp_call_text,
    qh.QUERY_ID AS child_sql_id,
    qh.QUERY_TEXT AS child_sql_text,
    qh.START_TIME AS child_start_time,
    qh.END_TIME AS child_end_time,
    qh.QUERY_TYPE AS child_query_type,
    qh.ERROR_MESSAGE AS child_error_msg
FROM sp_main_calls sp
JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY qh
    ON sp.SESSION_ID = qh.SESSION_ID
    AND sp.sp_query_id = qh.PARENT_QUERY_ID
ORDER BY sp.sp_start_time DESC, child_start_time ASC;

注意事项

如果你的场景存在存储过程嵌套调用的情况(即存储过程内部还调用了其他存储过程),可以把上述关联逻辑改成递归CTE,就能查询出整个调用链路下的所有层级子SQL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:15:01