Azure 数据工厂:执行管道 activity 无法引用调用管道,需要循环行为

Azure Data Factory: Execute Pipeline activity cannot reference calling pipeline, cyclical behaviour required

我有许多管道需要根据数据的可用性进行循环。如果数据不存在,请等待并重试。管道行为主要由数据库控制,该数据库捕获用于做出有关处理决策的日志。

我阅读了关于 Execute Pipeline activity 的 Microsoft documentation,其中指出

The Execute Pipeline activity allows a Data Factory or Synapse pipeline to invoke another pipeline.

虽然没有明确说明这是不可能的。我试图从 Pipe_A 引用 Pipe_A 但管道在下拉列表中不可见。我需要解决此限制的方法。

约束:

想法:

  1. 创建一个可以被引用的中间管道。 这不好 我需要为每个需要此行为的管道执行此操作,因为管道选择不允许使用动态内容。此方法还会污染数据工厂工作区。
  2. 如果满足条件,则在同一管道内等待后直接控制向后流动。 这也行不通If activity 不允许在与 If activity 相同的上下文中表达流本身。
  3. 我考虑过将此行为外化到 Python 应用程序,如果需要,该应用程序可以附加到 Azure 函数。该应用程序将处理调度和等待。应用程序可以调用它需要的任何管道,并且它本身可以被相关管道调用。这似乎很激烈!
  4. 最后,我发现了一个 activity Until 有 do while 行为。我可以将这些管道包装在 Until 中,管道执行并完成并将数据库状态设置为 'finished' 或无法完成并将状态设置为不完整并等待。然后表达式要么启动另一个执行,要么不启动。可以根据需要在过程中包含其他条件逻辑,该过程将用于为 Until 中的表达式使用的变量设置值。我需要每个管道一个变量。

认为 想法 4 有道理 ,我想我会 post 无论如何,以防人们发现其中的局限性这种方法 and/or 推荐一种方法。

是的,完全同意 All About BI, 在您的情况下,它似乎最适合 ADF Activity 直到:

The Until activity in ADF functions as a wrapper and parent component for iterations, with inner child activities comprising the block of items to iterate over. The result (s) from those inner child activities must then be used in the parent Until expression to determine if another iteration is necessary. Alternatively, if the pipeline can be maintained

Until activity 的评估条件可能包括来自其他活动、管道参数或变量的输出。

Wait activity结合使用时,Until activity允许您创建循环条件以定期检查特定操作的状态。以下是一些示例:

  • 检查数据库 table 是否已用新行更新。
  • 检查 SQL 作业是否完成。
  • 检查是否有任何新文件被添加到特定的 文件夹。