EXECUTE TASK¶
手动触发任务(独立任务或 任务图 中的根任务)的异步单次运行,不受为任务定义的计划限制。
成功运行根任务会触发任务图中子任务的级联运行(基于前置任务的完成),就像根任务按照其定义的计划运行一样。
此外,您可以手动触发重新执行先前失败的任务。
语法¶
EXECUTE TASK <name>
EXECUTE TASK <name> RETRY LAST
参数¶
name
要运行的独立任务或根任务的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
RETRY LAST
重新执行名为
name
的 任务图 中上次失败的任务,从任务失败的位置重新启动。要重新执行任务,必须满足以下条件:
最后运行的任务图必须处于 FAILED 或 CANCELED 状态。
任务图自上次运行以来不得有过修改。
任务图必须在过去 14 天内执行过或重试过。
要查看任务历史记录,请参阅 TASK_HISTORY 表函数或 Snowsight 任务历史记录。
备注
RETRY LAST 创建一个新的图形运行,该运行从上次失败的任务处开始执行。
具体而言,所有 FAILED 或 CANCELED 任务运行都会立即重新执行,并且如果所有前置任务都成功执行,则会计划关联的子任务。
此外,重试后生成的新任务图运行的 ATTEMPT NUMBER 将比先前失败的任务图多运行多一次,并且与重试后或原始任务图运行具有相同的 GRAPH_RUN_GROUP_ID。
使用说明¶
执行任务需要对该任务具有 OWNERSHIP 或 OPERATE 权限。
当 EXECUTE TASK 命令触发任务运行时,Snowflake 会验证对任务具有 OWNERSHIP 权限的角色是否也具有分配给该任务的仓库的 USAGE 权限,以及全局 EXECUTE TASK 权限;如果没有,则会产生错误。
任务始终使用原始所有者角色的权限运行,即使具有 OPERATE 权限的其他角色使用 EXECUTE TASK 来运行任务也是如此。
SQL 命令只能执行独立任务或任务图中的根任务。如果输入子任务,则该命令将返回用户错误。
手动执行独立任务或根任务将建立该任务的版本。独立任务或整个任务图使用此版本完成其运行。有关任务版本的详细信息,请参阅 运行的版本控制。
在:emph:不`恢复任务的情况下运行暂停的根任务;在执行此 SQL 命令之前,无需显式恢复根任务。但是,EXECUTE TASK :emph: 不会` 自动恢复任务图中的子任务。该命令将跳过任何暂停的子任务。
要以递归方式恢复与任务图中根任务关联的所有相关任务,请查询 SYSTEM$TASK_DEPENDENTS_ENABLE 函数,而不是单独启用每个任务(使用 ALTER TASK ... RESUME)。
作为测试新的或修改后的任务图的最佳实践,将根任务设置为按其预期的生产计划运行,但将其保留在暂停状态。成功测试任务图后,恢复根任务。请注意,您必须在用于测试的任务图中恢复任何暂停的子任务;否则,运行任务图期间将跳过它们。
如果根任务当前正在运行(即在 TASK_HISTORY 输出中处于某种 EXECUTING 状态),则 EXECUTE TASK 命令会安排在当前运行完成后立即启动该任务的另一次运行。
如果根任务当前已计划(即在 TASK_HISTORY 输出中处于 SCHEDULED 状态),则计划的运行将像往常一样替换为请求的运行,并将当前时间戳作为计划时间。但是,如果计划的时间已过(但任务尚未转换为 EXECUTING 状态),则计划的运行将照常进行。也就是说,计划的运行 不会 替换为请求的运行。
根任务上设置的 ALLOW_OVERLAPPING_EXECUTION 参数决定是否允许任务图的重叠实例。请求的任务运行的行为因参数值而异:
ALLOW_OVERLAPPING_EXECUTION = FALSE(默认值)
如果当前没有正在运行的任务图实例,则 EXECUTE TASK 命令会计划立即启动任务图的另一次运行。
如果任务图中的根任务或任何子任务当前正在运行(即在 TASK_HISTORY 输出中处于 EXECUTING 状态),则 EXECUTE TASK 命令将在运行完当前 任务图中的最后一个任务 后立即开始任务图的另一次运行。也就是说,任务图的当前实例必须在请求的任务开始之前完成其运行。
如果根任务当前已计划(即在 TASK_HISTORY 输出中处于 SCHEDULED 状态),则计划的运行将替换为请求的运行,并将当前时间戳作为计划时间。但是,如果计划的时间已过(但任务尚未转换为 EXECUTING 状态),则会执行计划的运行。也就是说,计划的运行 不会 替换为请求的运行。
ALLOW_OVERLAPPING_EXECUTION = TRUE
如果当前没有任务图实例正在运行,或者只有任务图中的子任务在实例中运行,则 EXECUTE TASK 命令会计划立即启动任务图的另一次运行。
如果根任务当前正在任务图的实例中运行,则 EXECUTE TASK 命令会计划在 根任务 的当前运行完成后立即启动任务任务图的另一次运行。
如果根任务当前已在任务图的实例中计划(即在 TASK_HISTORY 输出中处于 SCHEDULED 状态),则计划的运行将像往常一样替换为请求的运行,并将当前时间戳作为计划时间。但是,如果计划的时间已过(但任务尚未转换为 EXECUTING 状态),则会执行计划的运行。也就是说,计划的运行 不会 替换为请求的运行。
虽然对 EXECUTE TASK 命令的调用是同步处理的,但任务运行是异步操作。
此 SQL 命令触发的任务运行使用执行命令时的最新 任务版本。如果在执行命令 之后 但在运行开始之前修改了任务,则在 下一次 计划运行之前不会应用更改。
如果在执行任务时多次执行此 SQL 命令,则忽略除最后一个命令之外的所有命令执行。下次运行开始时,将使用上次执行时的最新任务版本。
如果任务失败并出现意外错误,您可以收到有关该错误的通知。有关配置任务错误通知的更多信息,请参阅 为任务启用错误通知。
要查看任务信息,您可以:
打开 Snowsight,选择 Monitoring » Task History。
调用 COMPLETE_TASK_GRAPHS 表函数,并检查结果。
示例¶
手动触发名为 mytask
的任务的运行:
EXECUTE TASK mytask;