如何从Snowflake查询历史表获取最近执行的存储过程并排查代码问题
问题原因
- 过滤条件作用范围不匹配:子查询中筛选存储过程调用的
QUERY_TEXT相关条件仅用于计算符合要求的最大时间,外层主查询没有添加相同过滤逻辑,会返回非存储过程调用的、end_time匹配该最大值的无关记录。 - 未做单条限制:即便补全过滤条件,同一时间点若存在多条符合要求的存储过程调用记录,原有写法仍会返回多条,无法直接得到唯一的全局最晚记录。
修复代码
推荐直接使用单层查询完成需求,逻辑更简洁:
SELECT * FROM TABLE(INFORMATION_SCHEMA.query_history_by_session()) WHERE UPPER(QUERY_TEXT) LIKE 'CALL%' AND UPPER(QUERY_TEXT) <> 'CALL "DB"."TK".GET_EXECUTION_ATTRIBUTES();' ORDER BY END_TIME DESC LIMIT 1;
如果需要保留子查询的写法,只需在外层补全对应的过滤条件即可:
SELECT * FROM TABLE(INFORMATION_SCHEMA.query_history_by_session()) WHERE UPPER(QUERY_TEXT) LIKE 'CALL%' AND UPPER(QUERY_TEXT) <> 'CALL "DB"."TK".GET_EXECUTION_ATTRIBUTES();' AND end_time = ( SELECT MAX(end_time) FROM TABLE(INFORMATION_SCHEMA.query_history_by_session()) WHERE UPPER(QUERY_TEXT) LIKE 'CALL%' AND UPPER(QUERY_TEXT) <> 'CALL "DB"."TK".GET_EXECUTION_ATTRIBUTES();' ) ORDER BY END_TIME DESC;
内容的提问来源于stack exchange,提问作者RMC_DEV
相关产品推荐
相关产品推荐

