Azure ADF:重新运行活动时丢失管道变量的值

问题描述 投票:0回答:1

在 ADF 中,我有一个演示管道,其中包含三个活动和一个名为parentRunId 的管道变量:

管道变量

第一个活动是“设置变量”活动,并为parentRunId生成UUID:

提供带有 UUID 的变量:

第二个活动使用parentRunId将其传递到Databricks笔记本:

将变量传递到笔记本:

第三步与此示例无关。

一切正常,UUID 显示在我的 Databrick 笔记本中。

但我希望能够从第 2 步重新启动我的管道,以防失败。

因此,我在第二步中选择 ADF 监视器中的“从所选活动重新运行”按钮:

从选定的活动重新运行

我的期望是,变量parentRunId仍然是相同的(因为我重新运行第一步,这将生成UUID)。

然而,令人惊讶的是,一个新的 UUID 被生成并传递给 Databricks。

这让我很难从故障中恢复,因为管道似乎已经失去了它的上下文。

这是一个错误吗?知道如何在活动之间传递一条信息,当我在管道中间重新启动时,这些信息也将可靠地可用吗?

azure azure-data-factory oracle-adf
1个回答
0
投票

这是一个错误吗?知道如何在活动之间传递一条信息,当我在管道中间重新启动时,这些信息也将可靠地可用吗?

我认为这是 ADF 中的默认性质,每当我们重新运行管道时,即使它说已跳过,设置变量活动也会再次执行。

为了达到您的要求,您可以尝试以下解决方法。但为此,您需要 Blob 存储或 ADLS 存储、复制活动和查找活动。

重新运行期间,复制活动和查找活动将被跳过。因此,首先使用复制活动将

run_id
存储在文件中,然后使用查找活动获取它。

遵循以下设计。

enter image description here

在 ADLS 或 Blob 中创建一个包含一列和一列的虚拟 source.csv 文件。为此创建数据集并添加为复制活动的源。在源中,通过像上面一样为其创建附加列,将您的

run_id
变量添加到源中。

将其复制到另一个 csv 文件。将该数据集添加到复制活动接收器。

enter image description here

现在,使用相同的目标数据集进行查找活动,如下所示。

enter image description here

在第一次管道运行时,复制活动将为

run_id
创建一个附加列并将其存储在目标 csv 文件中。查找活动将从同一目标数据集中给出所需的
run_id

您可以使用以下表达式从查找中获取该值。

@activity('Lookup1').output.value[0].run_id

这里我使用设置变量活动来代替笔记本活动。

enter image description here

管道正常运行:

enter image description here

上述管道run_id将存储在文件中。

在这里,我重新运行 Set variable2 活动。

enter image description here

需要旧管道run_id:

enter image description here

即使新的管道 run_id 存储在第一个活动中,您也可以看到它提供了所需的旧管道 run_id。

只需将最后一个活动替换为您的笔记本活动,并将相同的表达式传递给您的笔记本活动参数。

© www.soinside.com 2019 - 2024. All rights reserved.