0

我知道直到活动正常工作......直到。所以它不检查第一次运行的表达式,当第二次执行内部活动时,它首先检查表达式。如果表达式结果为真,那么它将执行内部活动等等......

但是我尝试的情况不一样,只有当表达式结果为假时才会重复。这里@equals(1,2)运行内部活动,但如果我把@equals(1,1)它执行一次内部活动。 在此处输入图像描述

在我的情况下,我需要回忆内部活动,直到特定活动(笔记本)失败。 @equals('Failed',string(activity('CheckStatus').Status)) 所以,这里它应该从第二次回忆起内在活动,因为上述条件是正确的,但它不会以这种方式做出反应。正如您在下面的屏幕截图中看到的,它仅第一次运行。 在此处输入图像描述

根据答案之一中的评论更新更具体的场景。

  1. 我想在失败的情况下循环失败特定的时间,所以我输入的表达式是@and(equals('Failed',activity('CheckStatus').Status),lessOrEquals(int(variables('counter')),3)). 所以它说如果 CheckStatus 活动失败并且计数器 <= 3,如果这种情况为真,则再次调用内部活动。 在此处输入图像描述
  2. 内部活动正在设置该计数器并调用我的 CheckStatus 笔记本,如果失败等待 5 分钟。 在此处输入图像描述
4

1 回答 1

0

正确的。until 活动循环一次,然后继续循环,直到表达式返回 true。通常你让它检查循环中活动的一些输出。例如,您可以循环直到检查长时间运行操作状态的活动返回 true:

@equals('Succeeded',string(activity('CheckStatus').output.properties.state))

在您的情况下,您应该将 Databricks 活动复制到管道的顶层并删除直到活动。然后在 Databricks 活动上设置 Retry=3 和 RetryInterval=300。它最多允许重试 3 次,重试之间有 5 分钟的暂停。如果所有重试都失败,则管道将失败。

于 2021-06-15T12:24:22.837 回答