如果 ADF 上的值为 true,如何运行 For Each 活动?

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

我有一个

Lookup activity
,我可以在其中检查 Kusto (ADX) 值是 true 还是 false,然后我可以运行下一个
Lookup activity
,最后运行基于第二个查找值的
For Each activity

问题是,如果条件为真,我只想运行第二个

Lookup
For Each
,但ADF不允许
For Each
位于
If Activity
内部,而且我已经有很多管道了调用子管道(我讨厌这种解决方案,因为它变得如此丑陋,并且不知何故看起来对于同一个解决方案来说它非常重复)。

有没有办法在运行

For Each
之前检查这一点?我尝试了验证活动,但看起来它不接受来自
Lookup
的值,仅接受来自
Dataset
的值。

这是我目前的逻辑:

但在这种情况下它不起作用,因为无论条件为真还是假,For Each 都会始终运行。

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

您可以使用 Do-if-skip-else-block 错误处理方法作为此场景的解决方法。

首先在管道变量部分创建一个整型变量。现在,采用一个设置变量并给出您的 if 活动条件。

@if(<Your if activity expression>,1,'1')

enter image description here

在这里,我使用

True
False
作为 if 活动表达式结果。此设置变量活动充当 if 活动,其成功和失败将充当 if 和 else 场景。

在此设置变量活动成功时添加您的 True 活动,在其失败时添加 False 活动。在 True 活动的最后一个活动之后,在跳过最后一个活动时添加一个样本集变量活动

您可以查看这个错误处理方法的汇总表来了解这种方法。

这里,如果您的 if 表达式为

true
,则上述表达式会将整数值
1
赋给整型变量
var1
,并且活动成功。然后您的 True 活动将与您的 For-Each 一起执行。

enter image description here

如果表达式结果为

False
,则上述表达式会将字符串值
'1'
分配给整型变量,从而导致活动失败。然后你的 False 活动将被执行。

enter image description here

在这种阻止管道失败的方法中,如“Do-if-else 块”,在跳过最后一个 True 活动时使用了额外的设置变量活动。这继承了上面的假 if 活动失败时的管道。

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