EXECUTE TASK¶
手动触发任务(独立任务或 任务图 中的根任务)的异步单次运行,不受为任务定义的计划限制。
成功运行根任务会触发任务图中子任务的级联运行(基于前置任务的完成),就像根任务按照其定义的计划运行一样。
此外,您可以手动触发重新执行先前失败的任务。
- 另请参阅:
CREATE TASK , DESCRIBE TASK , ALTER TASK , DROP TASK , SHOW TASKS
语法¶
EXECUTE TASK <name>
[ USING CONFIG = <configuration_string> ]
EXECUTE TASK <name> RETRY LAST
参数¶
name要运行的独立任务或根任务的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
USING CONFIG = configuration_stringSpecifies a configuration string in valid JSON format for this single execution. This parameter creates a new execution with the dynamically specified configuration, but doesn't modify the task definition.
Snowflake merges the dynamic configuration with the default configuration, which is the CONFIG parameter that you set in the task definition with CREATE or ALTER. For matching fields, Snowflake uses the dynamically specified values. For non-matching fields, Snowflake uses the values from the default configuration. For an example, see Use a dynamic CONFIG.
The configuration string follows the same format as the CONFIG parameter in CREATE TASK or ALTER TASK:
CONFIG = $${"string1": value1 [, "string2": value2, ...] }$$
Example:
CONFIG = $${"learning_rate": 0.2, "environment": "testing"}$$
RETRY LAST重新执行 任务图 中名为
name的上次失败的任务,从任务失败的位置重新启动。要重新执行任务,必须满足以下条件:
最后运行的任务图必须处于 FAILED 或 CANCELED 状态。
任务图自上次运行以来不得有过修改。
The last failed graph run's first attempt must have been executed in the last 14 days.
要查看任务历史记录,请参阅 /sql-reference/functions/task_history`Snowsight 上的表格功能或 :doc:“任务”页面 </user-guide/ui-snowsight-tasks>`。
备注
RETRY LAST 创建一个新的图形运行,该运行从上次失败的任务处开始执行。
具体而言,所有 FAILED 或 CANCELED 任务运行都会立即重新执行,并且如果所有前置任务都成功执行,则会计划关联的子任务。
此外,重试后生成的新任务图运行的 ATTEMPT NUMBER 将比先前失败的任务图多运行多一次,并且与重试后或原始任务图运行具有相同的 GRAPH_RUN_GROUP_ID。
使用说明¶
执行任务需要对该任务具有 OWNERSHIP 或 OPERATE 权限。
当 EXECUTE TASK 命令触发任务运行时,Snowflake 会验证对任务具有 OWNERSHIP 权限的角色是否也具有分配给该任务的仓库的 USAGE 权限,以及全局 EXECUTE TASK 权限;如果没有,则会产生错误。
任务始终使用原始所有者角色的权限运行,即使具有 OPERATE 权限的其他角色使用 EXECUTE TASK 来运行任务也是如此。
默认情况下,Snowflake 使用具有任务所有者角色权限的系统用户来运行任务。要以特定用户身份运行任务,请使用 EXECUTE AS USER 配置任务。有关更多信息,请参阅 使用用户权限运行任务。
For the USING CONFIG option:
If the task graph is currently executing and you run this command, Snowflake waits for the current execution to complete before starting a new execution with the dynamic configuration.
If you run this command multiple times while a task is executing, Snowflake uses the configuration from the most recent command for the next run. Previous configurations are replaced and won't be executed.
The dynamic configuration only applies to the single execution triggered by this command. Subsequent scheduled runs use the default CONFIG parameter from the task definition.
SQL 命令只能执行独立任务或任务图中的根任务。如果输入子任务,则该命令将返回用户错误。
手动执行独立任务或根任务将建立该任务的版本。独立任务或整个任务图使用此版本完成其运行。有关任务版本的详细信息,请参阅 任务运行的版本控制。
在 不 恢复任务的情况下运行暂停的根任务;在执行此 SQL 命令之前,无需显式恢复根任务。但是,EXECUTE TASK 不会 自动恢复任务图中的子任务。该命令将跳过任何暂停的子任务。
要以递归方式恢复与任务图中根任务关联的所有相关任务,请查询 SYSTEM$TASK_DEPENDENTS_ENABLE 函数,而不是单独启用每个任务(使用 ALTER TASK ...RESUME)。
作为测试新的或修改后的任务图的最佳实践,将根任务设置为按其预期的生产计划运行,但将其保留在暂停状态。成功测试任务图后,恢复根任务。请注意,您必须在用于测试的任务图中恢复任何暂停的子任务;否则,运行任务图期间将跳过它们。
如果任务的实例没有在运行,则会立即开始新的运行。
如果计划了另一个实例(即,如果任务在 TASK_HISTORY 输出中显示 SCHEDULED 状态),则请求的运行将取代计划的运行。使用当前时间戳作为计划时间,请求的运行将立即开始。
如果任务或任务图当前正在排队或正在执行(即,如果任务在 TASK_HISTORY 输出中显示 EXECUTING 状态),则当前运行继续使用执行命令时的最新 任务版本。然后,计划开始新的运行,具体时间视任务类型而定:
对于独立任务,计划在当前运行完成后开始新的运行。
对于任务图:
如果 ALLOW_OVERLAPPING_EXECUTION = FALSE(默认),则计划在当前任务图完成后开始新的运行。
如果 ALLOW_OVERLAPPING_EXECUTION = TRUE,并且当前正在执行的任务是根任务,则计划在根任务完成后开始新的运行。
如果 ALLOW_OVERLAPPING_EXECUTION = TRUE,并且当前正在执行的任务是子任务,则立即开始新的运行。
如果在下一次计划运行开始之前再次执行 EXECUTE TASK 命令,则请求的运行将取代计划的运行。
如果任务失败并出现意外错误,您可以收到有关该错误的通知。有关配置任务错误通知的更多信息,请参阅 为任务设置错误通知。
要查看任务信息,您可以:
在 Snowsight 中的导航菜单内,选择 Transformation » Tasks。
调用 COMPLETE_TASK_GRAPHS 表函数,并检查结果。
示例¶
The following examples show how to manually trigger a task run and how to use a dynamic CONFIG.
Manually trigger a task run¶
手动触发名为 mytask 的任务的运行:
EXECUTE TASK mytask;
Use a dynamic CONFIG¶
Create a root task named my_root_task with a default configuration:
CREATE OR REPLACE TASK my_root_task
WAREHOUSE = regress
SCHEDULE = '10 m'
CONFIG = $${
"environment": "production",
"output_paths": {
"logs": "/prod/logs",
"results": "/prod/results"
}
}$$
AS ...;
Now, execute the task and specify a dynamic configuration:
EXECUTE TASK my_root_task
USING CONFIG=$${
"output_paths": {
"results": "/temp/testing"
}
}$$;
The following example shows the resulting configuration for this execution:
{
"environment": "production",
"output_paths": {
"logs": "/prod/logs",
"results": "/temp/testing"
}
}
The environment field and the output_paths.logs field remain unchanged from the default configuration;
only output_paths.results is updated with the dynamic value.