Azure 数据工厂和 Azure Synapse Analytics 中的嵌套活动

适用于:Azure 数据工厂 Azure Synapse Analytics

本文帮助你了解 Azure 数据工厂和 Azure Synapse Analytics 中的嵌套活动及其用法、限制和最佳做法。

概述

数据工厂或 Synapse 工作区管道可以包含控制流活动,而这些活动又可以包含其他活动。 可将这些嵌套活动视为容器,其中包含一个或多个可以根据顶级控制流活动执行的其他活动。

请参阅以下示例,其中的 If 活动包含另一个活动。

显示一个示例 If 条件活动的屏幕截图,该活动包含另一个活动。

控制流活动

以下控制流活动支持嵌套活动:

控制活动 说明
对每一个 ForEach 活动在管道中定义重复的控制流。 此活动用于循环访问集合,并在循环中执行指定的活动。 此活动的循环实现类似于采用编程语言的 Foreach 循环结构。
If Condition 活动 If Condition 可用于基于计算结果为 true 或 false 的条件进行分支。 If Condition 活动可提供 if 语句在编程语言中提供相同的功能。 当条件计算结果为 true 时,它会计算一组活动,当条件计算结果为 false. 时,它会计算另一组活动
Until 活动 实现类似于采用编程语言的 Do-Until 循环结构的 Do-Until 循环。 它在循环中将执行一组活动,直到与活动相关联的条件的计算结果为 true。 可以为 Until 活动指定超时值。
切换活动 Switch 活动提供的功能与编程语言中 switch 语句提供的功能相同。 它计算一组与条件求值匹配的 case 相对应的活动。

可通过两种主要方式导航到嵌套活动中包含的活动。

  1. 支持嵌套活动的每个控制流活动都有一个活动选项卡。选择该活动选项卡会显示一个铅笔图标,使用该图标可以向下钻取到内部活动面板。 显示一个示例 If 条件活动的屏幕截图,其中突出显示了用于导航的铅笔图标。

  2. 从管道画布上的活动中,可以选择铅笔图标以向下钻取到内部活动面板。 此外,ForEach 和 Until 活动支持双击活动以向下钻取到内部活动面板。 显示管道画布上的示例 If 条件活动的屏幕截图,其中突出显示了铅笔图标。

然后,管道画布将切换到所选内部活动容器的上下文。 顶部还显示了痕迹导航跟踪,选择它可以导航回到父管道。 显示 true 分支内的示例 If 条件活动的屏幕截图,其中突出显示了可用于导航回到父管道的痕迹导航。

嵌套活动的嵌入限制

支持嵌套的活动(ForEach、Until、Switch 和 If Condition)上存在约束,以便嵌套另一个嵌套的活动。 具体而言:

  • If 和 Switch 可在 ForEach 或 Until 活动中使用。
  • If 和 Switch 不能在 If 和 Switch 活动中使用。
  • ForEach 或 Until 仅支持单个级别的嵌套。

请参阅下面的最佳做法部分,了解如何使用其他管道活动来实现这种方案。 此外,不能将验证活动放入嵌套活动中。

If 和 Switch 可在 ForEach 或 Until 活动中使用。 ForEach 或 Until 仅支持单级嵌套 If 和 Switch,不能在 If 和 Switch 活动中使用。

多级别嵌套活动的最佳做法

若要构建支持多个级别的嵌套深度的逻辑,可以使用嵌套活动内部的执行管道活动来调用另一个管道,这样,便可以构成嵌套活动的另一个级别。 此模式的一个常见用例是 ForEach 循环,在其中需要内部活动中的逻辑进一步循环。

此模式的一个例子是,文件系统有一个文件夹列表,而每个文件夹包含多个要处理的文件。 一般情况下,可以通过执行以下操作来实现这种模式。

  1. 首先使用获取元数据活动来仅获取文件夹的列表。
  2. 将“获取元数据”活动的结果传递到 ForEach 活动的项列表中。 然后,每个迭代代表一个要处理的文件夹。
  3. 在 ForEach 活动的内部活动面板中,使用另一个“获取元数据”活动来获取文件夹中的文件列表。
  4. 调用具有数组参数的“执行管道”活动并向其传递这些文件名的数组。
  5. 然后,在子管道中,可以使用另一个嵌套活动(例如 ForEach)和传入的数组列表来迭代文件并执行一个或多个内部活动集。

父管道类似于以下示例。

显示在 ForEach 循环中调用子管道的示例父管道的屏幕截图。

子管道类似于以下示例。

显示具有 ForEach 循环的示例子管道的屏幕截图。

参阅以下教程,获取有关创建管道和数据集的分步说明。