【问题标题】:Until Activity in Azure Data Factory executes even when the condition doesn't match直到 Azure 数据工厂中的活动在条件不匹配时执行
【发布时间】:2020-07-10 11:26:30
【问题描述】:

我使用 until 活动按顺序复制文件。为此,我创建了一个变量并赋值为 0,并将其与数据湖中可用的文件数进行比较。直到活动中使用的表达式检查变量值是否大于文件数,直到变量值大于文件数,循环执行。如果在数据湖中找不到文件,则变量值将设置为 1,文件数将为 0。 但是发生的情况是,即使变量的值为 1 并且文件数为零,直到活动活动尝试执行内部活动。有什么解决办法吗? 用于设置变量值的条件活动: @equals(activity(lookup).output.firstrow.NumberOfFiles,0) 然后设置变量 var1 =1 else 0 直到活动中使用的表达式:@greater(int(variables('var1')),activity(lookup).output.firstrow.NumberOfFiles) 在 until 活动中: 设置变量以将 var1 的值增加 1

如果有任何建议,将非常有帮助

问候, 桑迪普

【问题讨论】:

    标签: azure azure-data-factory azure-data-factory-2 until-loop azure-data-factory-pipeline


    【解决方案1】:

    根据 Microsoft 文档,Until 活动提供的功能与编程语言中的 do-until 循环结构提供的功能相同。

    它会先执行一次内部活动,然后根据表达式的结果来决定是循环还是中断。

    因此,在您的情况下,您的内部活动将执行一次,然后获取 true 值并中断 until 活动。

    如果你不想执行一次,你可以使用另一个If Condition activity,让var1 = 1不要执行util活动。

    【讨论】:

    • 嗨@steve-zhao,如果该值大于0,则不应执行内部活动。循环应该在那里退出。
    • @SandeepT 虽然 ADF 说 untill 与 do while 类似,但活动在 untill 中的表达式返回 false 时运行并在条件为 true 时中断
    【解决方案2】:

    如果在数据湖中找不到文件,则变量值为 设置为 1,文件数为 0。

    直到活动中使用的表达式: @greater(int(variables('var1')),activity(lookup).output.firstrow.NumberOfFiles)

    Until 活动按预期工作。

    直到活动中使用的表达式检查变量是否 值大于文件数,直到变量值 大于文件数,循环执行。

    很遗憾,您对其工作原理的假设是不正确的。 Until 循环将始终至少运行一次。在每次迭代结束时,它会测试它的条件以查看它是否应该再次运行。它不会首先检查条件,如您所述。

    解决方法是使用 ForEach 活动而不是 Until 活动。 ForEach 将始终运行您需要的次数,它使您不必通过变量操作来跟踪循环条件。

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2018-10-02
      相关资源
      最近更新 更多