在循环中运行参数化 Azure Databricks 作业任务

本文讨论如何将 For each 任务与 Azure Databricks 作业配合使用,包括有关在作业 UI 中添加和配置任务的详细信息。 使用 For each 任务在循环中运行任务,将一组不同的参数传递给任务的每次迭代。

For each 任务添加到作业需要定义两个任务:For each 任务和“嵌套任务”。 嵌套任务是为 For each 任务的每次迭代运行的任务,是 Azure Databricks 作业的标准任务类型之一。 不能将另一个 For each 任务添加为嵌套任务。

例如,可以使用 For each 任务对多个表执行一组常见的转换,并将表名列表中的表名传递给任务的每次迭代。

可以对 For each 任务使用哪些参数类型?

若要从 For each 任务传递参数,可以:

  • 在创建或编辑任务时定义一个 JSON 格式的集合。
  • 使用前一个任务传递的任务值。 要了解有关任务值的详细信息,请参阅使用任务值在任务之间传递信息
  • 使用作业参数 要了解有关作业参数的详细信息,请参阅配置作业参数

若要了解如何在添加或编辑 For each 任务时使用这些不同的参数类型,请参阅下一部分将“对于每个”任务添加到作业

For each 任务添加到作业

可以在创建作业或编辑在现有作业中的任务时添加 For each 任务。 要配置 For each 任务,请:

  1. 在“类型”下拉菜单中,选择“对于每个”。

  2. 在“任务名称”字段中输入任务的名称。

  3. 在“输入”文本框中,定义要循环访问的 For each 任务的值。 可以是以下位置之一:

    • 一个 JSON 格式的值数组。 可以是以下数据类型的数组:

      • 键值对
      • 字符串、数字或布尔类型
      • 任意复杂 JSON 对象
    • 任务值引用。 若要引用前一个任务传递的任务值,请使用 {{tasks.<task_name>.values.<task_value_name>}} 语法在“输入”文本框中设置值。 例如,如果在 For each 任务之前名为 generate_countries_list 的任务设置了以下任务值:

      dbutils.jobs.taskValues.set(key = "countries", value = countries_array)

      然后,For each 任务使用以下语法在“输入”文本框中引用该任务值:

      {{tasks.generate_countries_list.values.countries}}

    • 作业参数。 若要引用作业参数,请在“输入”文本框中使用以下语法:{{job.parameters.<name>}} 例如,{{job.parameters.countries}}

  4. 若要选择设置可并行运行的迭代次数,请输入任务的“并发”值。 默认值是 1秒。

  5. 若要有选择地接收任务开始通知、成功通知或失败通知,请单击“+ 添加”。 请参阅针对作业事件添加电子邮件和系统通知

  6. 若要完成 For each 任务的配置,并为每个迭代添加一个嵌套任务,请单击“添加要循环访问的任务”。

  7. 为嵌套任务选择任务类型和配置选项。 嵌套任务是标准任务类型,具有相同的配置选项。 请参阅配置和编辑 Databricks 任务

  8. 若要引用 For each 任务传递的参数,请单击“参数”。 使用 {{input}} 引用将值设置为每次迭代的数组值,或者在循环访问对象列表时使用 {{input.<key>}} 引用单个对象字段。

    将嵌套任务添加到“对于每个”任务

  9. 单击“创建任务”。

For each 任务与嵌套任务之间切换

For each 任务在作业 UI 中显示为节点,其中包含 For each 节点内的 嵌套任务节点。 若要在 For each 任务和嵌套任务之间切换,请单击相应节点。

作业 UI DAG 视图切换到“对于每个”任务

作业 UI DAG 视图切换到嵌套任务

在下游任务中引用 For each 任务

For each 任务是顶级任务,下游任务可以将其指定为依赖项。 下游任务不能依赖或引用嵌套任务。

运行和监视包含 For each 任务的作业

运行包含 For each 任务的作业与运行其他作业相同。

查看和管理作业运行也与任何其他作业相同,但 For each 任务的任务运行历史记录除外,该历史记录以任务迭代表的形式显示。 请参阅查看“对于每个”任务的任务运行历史记录