如何在Snowflake中获取所有活跃与非活跃任务?已尝试task_history函数
获取Snowflake中所有活跃/非活跃任务的查询方法
方法1:直接查询任务基本状态(推荐)
使用INFORMATION_SCHEMA.TASKS视图可以直接获取所有任务的当前状态,这个视图包含了任务的核心属性,包括状态、调度规则、所属库/ schema等:
SELECT task_name, state AS task_status, schedule, database_name, schema_name, owner, last_completed_time FROM INFORMATION_SCHEMA.TASKS ORDER BY database_name, schema_name, task_name;
字段说明:
task_status:任务当前状态,常见值包括:SCHEDULED:活跃状态,任务按计划等待执行SUSPENDED:非活跃(暂停)状态,任务不会自动运行FAILED:任务执行失败后可能处于此状态(通常需手动干预恢复)
方法2:结合任务执行历史,获取状态+最近运行情况
如果需要同时查看任务的当前状态和最近的执行记录,可以结合INFORMATION_SCHEMA.TASKS和TASK_HISTORY函数,更全面了解任务的运行健康度:
WITH task_core_info AS ( SELECT task_name, database_name, schema_name, state AS current_task_status, schedule FROM INFORMATION_SCHEMA.TASKS ), latest_task_runs AS ( SELECT task_name, database_name, schema_name, MAX(start_time) AS last_run_start_time, MAX(end_time) AS last_run_end_time, MAX(state) AS last_run_status, MAX(error_code) AS last_error_code, MAX(error_message) AS last_error_details FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY( SCHEDULED_TIME_RANGE_START => DATEADD(day, -7, CURRENT_TIMESTAMP()), RESULT_LIMIT => 1000 )) GROUP BY task_name, database_name, schema_name ) SELECT tci.database_name, tci.schema_name, tci.task_name, tci.current_task_status, tci.schedule, ltr.last_run_start_time, ltr.last_run_end_time, ltr.last_run_status, ltr.last_error_code, ltr.last_error_details FROM task_core_info tci LEFT JOIN latest_task_runs ltr ON tci.database_name = ltr.database_name AND tci.schema_name = ltr.schema_name AND tci.task_name = ltr.task_name ORDER BY tci.database_name, tci.schema_name, tci.task_name;
说明:
TASK_HISTORY参数可调整:SCHEDULED_TIME_RANGE_START设置为最近7天,可按需修改时间范围;RESULT_LIMIT控制返回的历史记录条数LEFT JOIN确保即使任务最近没有运行(比如新创建未执行、已暂停)也会被包含在结果中
权限注意事项
执行上述查询需要以下权限:
- 目标数据库和schema的
USAGE权限 INFORMATION_SCHEMA.TASKS视图的SELECT权限- 访问
TASK_HISTORY的权限(通常需要任务的MONITOR权限或全局的MONITOR EXECUTION权限)
内容的提问来源于stack exchange,提问作者Pushpa Peddamaganti
相关产品推荐
相关产品推荐

