参数化
本节介绍参数以及如何在作业和任务中使用这些参数。
关于参数
可以通过传递更改作业、任务或作业运行行为的参数来定制作业运行。
可以在工作流的三个不同级别提供参数:作业级别、任务级别和作业运行级别。在发生冲突时,参数具有以下优先级:作业运行 > 任务 > 作业。
- 作业运行级别参数:在作业运行有效负载中指定的作业运行级别参数优先于在作业配置中定义的任务级别参数。这意味着在作业运行期间指定的任何参数都会覆盖特定于任务的默认值。
- 任务层参数:如果未提供特定任务的作业运行参数,则任务将使用在作业配置中的任务层定义的参数。具有相同名称的作业级参数将覆盖该特定任务的任务级参数。因此,如果需要特定于任务的参数,则应将其命名为作业参数。
- 任务层参数:如果既未提供任务层参数,也未提供运行时参数,则应用在任务层设置的默认值。作业级别参数被视为默认值,在没有更具体的参数可用时可以使用这些默认值。
注意:
任务参数在任务上下文中不可变。这意味着,如果存在参数为 JobParamA 且解析值为 JobParamRuntimeValueA 的作业,则 TaskA 执行无法更改 JobParamA 的值。对于所有任务和整个作业运行,JobParamA 的值保持为 JobParamRuntimeValueA。因此,如果您希望在任务之间共享信息,可以使用中间存储或输出参数来实现此目的。当任务名称、任务值关键字或作业参数名称包含特殊字符(例如 !@$%)时,必须使用反引号 (` `) 将这些标识符括起来。只有字母数字和下划线字符才可用,且背勾中的标识符没有周围。
例如:
{
"VariableWithSpecialChars": "{{job.parameters.`param$@`}}"
}系统参数是模板参数,其值由系统在工作流运行和后续任务运行过程中提供。您不必为这些模板参数提供默认值或其他值。AI Data Platform Workbench 包含工作流中支持的有效模板参数/动态值参考的固定列表。系统参数通过用两个大括号括起来输入。例如 {{job.id}}。
表 12-1 支持的系统参数
| Parameter (参数) | 说明 |
|---|---|
| 免费 WiFi | 分配给集线器的唯一标识符 |
| 免费 WiFi | 中心区域 |
| {{workspace.id}} | 分配给工作区的唯一标识符 |
| 联系我们 | 工作区的 URL |
| 详细介绍 | 分配给作业的唯一标识符 |
| 免费 WiFi | 作业运行时的作业名称 |
| 免费 WiFi | 分配给作业运行的唯一标识符 |
| 免费 WiFi | 当前作业运行的修复尝试次数 |
| 免费 WiFi | 基于作业运行开始的时间(以 UTC 时区表示)的值。返回值基于参数选项。请参阅选项以了解日期和时间值。 |
| 免费 WiFi | 关键字为 [name] 的作业级参数的值 |
| 详细介绍 | 作业运行的触发器类型。可能的值为“人工”和“已计划”。 |
| 友情链接: | 如果为此作业配置了文件到达触发器,则存储位置的值 |
| 温哥华酒店查看景点 | 基于触发作业运行的时间(以 UTC 时区为单位)的值,向下舍入到具有 cron 调度的作业的最接近分钟。返回值基于参数选项。请参阅选项以了解日期和时间值。 |
| 免费 WiFi | 当前任务的名称 |
| 详细介绍 | 当前任务运行的唯一标识符 |
| 详细介绍 | 当前任务的运行次数(包括重试和维修) |
| 免费 WiFi | 当前记事本任务的记事本路径 |
| 友情链接: | 分配给 [task_name] 的任务运行的唯一标识符 |
| {{tasks_name].result_state}} | 任务的结果状态 [task_name]。可能的值包括 success、failed、exluded、sceled、skipped、timed out、upstream_canceled 和 upstream_failed。 |
| 友情链接: | 任务 [task_name] 的错误代码(如果运行任务时出错)。可能值的示例包括 RunExecutionError、ResourceNotFound 和 UnauthorizedError。对于成功的任务,求值结果为空字符串。 |
| {{tasks.[task_name].execution_count}} | 运行任务 [task_name] 的次数(包括重试和修复) |
| {{tasks.[task_name].notebook_path}} | 记事本任务的记事本的路径 [task_name] |
| 友情链接:友情链接 | 任务 [task_name] 设置的关键字为 [value_name] 的任务值 |
表 12-2:日期和时间选项
| 参数 | 说明 |
|---|---|
| iso-weekday | 返回从 1 到 7 的数字,表示时间戳中的星期几 |
| is_weekday | 如果时间戳位于工作日,则返回 true
|
| iso_ 日期 | 返回 ISO 格式的日期 |
| 等日期时间 | 返回 ISO 格式的日期和时间 |
| 年 | 返回时间戳的年份部分 |
| 月份 | 返回时间戳的月部分 |
| 天运行一次 | 返回时间戳的天部分 |
| 小时 | 返回时间戳的小时部分 |
| 分钟 | 返回时间戳的分钟部分 |
| 秒 | 返回时间戳的第二部分 |
| 时间戳 _ms | 返回时间戳(毫秒) |
在任务和记事本之间传递参数
您可以将参数从任务传递到记事本,反之亦然。这支持动态工作流行为,允许记事本根据运行时值调整其处理。
oidlUtils.parameters 程序包提供了处理这些参数操作的必要功能。oidlUtils 软件包是 AI Data Platform Workbench 中的一个实用程序库,可简化参数管理、任务值传递和其他工作流操作等任务。它通常用于记事本和任务中,用于获取和设置工作流阶段的参数。
oidlUtils.parameters.setTaskValue(key="payload", value="abc", "defaultValue")oidlUtils.parameters.setTaskValue(key="payload", value=json.dumps(payload), "defaultValue")工作流示例:传递参数
在这种情况下,我们在工作流中具有两个记事本。记事本 1 从任务接收参数,处理参数,并设置在下一个任务中传递给记事本 2 的输出参数。
记事本 1:获取和设置参数# Get parameter if already set in the task
param_key = "param1"
param_value = oidlUtils.parameters.getParameter(param_key, "defaultValue")
print(param_value)
print("Param {} value is {}".format(param_key, param_value))
# Set parameter value in the task
output_parameter_key = "output_parameter"
output_param_value = oidlUtils.parameters.getParameter(output_parameter_key, "defaultValue2")
print("Param {} value is {}".format(output_parameter_key, output_param_value))
oidlUtils.parameters.setTaskValue(output_parameter_key, "1234")第一个记事本检索从任务传递的参数 (param1),然后设置一个新参数 (output_param_2),该参数将在下一个任务中使用。
记事本 2:读取输出参数output_param_2= "output_parameter"
param_value = oidlUtils.parameters.getTaskValue("GetSetParameter", output_param_2, "defaultValue")
print("Param {} value is {}".format(output_param_2, param_value))第二个记事本通过工作流任务从记事本 1 接收 output_param_2 并对其进行处理。
- 任务 1:记事本 1
- 在第一个任务中,参数可以从作业或任务本身传递到记事本 1。
- 记事本 1 将参数作为输入参数 param1 处理,并设置新的输出参数(例如 output_param_2)。
- 任务 2:记事本 2
- 在第二个任务中,记事本 2 通过传递工作流中设置的第一个任务 "GetSetParameter" 的名称,直接在上面所示的记事本代码中引用它来接收任务 1 的输出参数。
- output_param_2 的值传递到记事本 2 中,该值可用于进一步处理。
这种方法可以轻松地在任务和记事本之间动态传递值,从而使您的工作流更加灵活和自适应。

