Snowflake查询历史无法捕获运行中无限循环查询的问题
Snowflake无法捕获运行中查询的问题解决
问题根源
INFORMATION_SCHEMA.QUERY_HISTORY_BY_SESSION()是会话级函数,仅返回当前会话内的查询记录。如果你的无限循环查询是在另一个会话(新窗口、新工作表)执行的,这个函数根本看不到。- 就算是同一会话,Snowflake同一时间只能执行一个查询——当你运行查询历史语句时,之前的无限循环查询会被中断,自然不会显示为
RUNNING状态。
解决步骤
1. 切换到全局查询历史视图/函数
要查看所有会话的运行中查询,改用全局级的查询历史工具:
方式一:使用ACCOUNT_USAGE视图(需账户级权限)
SELECT QUERY_ID, QUERY_TEXT, EXECUTION_STATUS, START_TIME FROM ACCOUNT_USAGE.QUERY_HISTORY WHERE LOWER(EXECUTION_STATUS) = 'running' AND DATEDIFF(HOUR, START_TIME, CURRENT_TIMESTAMP()) >= 1;
方式二:使用全局QUERY_HISTORY函数
SELECT QUERY_ID, QUERY_TEXT, EXECUTION_STATUS, START_TIME FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY()) WHERE LOWER(EXECUTION_STATUS) = 'running' AND DATEDIFF(HOUR, START_TIME, CURRENT_TIMESTAMP()) >= 1;
2. 验证会话隔离
执行无限循环查询时,必须在独立会话(比如新的工作表标签、另一个客户端连接)中运行,再回到当前会话执行查询历史语句——同一会话无法同时运行两个查询,之前的循环会被中断。
3. 确认权限
- 使用
ACCOUNT_USAGE.QUERY_HISTORY需要账户授予MONITOR USAGE角色或直接的SELECT权限。 INFORMATION_SCHEMA.QUERY_HISTORY()默认仅能查看当前用户的所有会话查询,要查看其他用户的查询,需拥有MONITOR权限。
内容的提问来源于stack exchange,提问作者R0bert
相关产品推荐
相关产品推荐

