我有一个带有多个管道的数据工厂,每个管道有大约20个复制活动,可以在两个存储帐户之间复制azure表。
每个管道处理每个azure表的快照,因此我想顺序运行管道,以避免用旧数据覆盖最新数据的风险。
我知道将第一个管道输出作为第二个管道的输入,我们可以实现这一点。但由于我在管道中有很多活动,我不确定最后会完成哪些活动。
无论如何,我知道管道已经完成,或者管道完成状态无论如何都会触发下一个管道?
在活动中,inputs
是一个数组。那么可以提供多个输入吗?如果是,所有输入将异步或一个接一个地运行?
在多个输入的上下文中,我已阅读有关调度依赖性的信息。那么外部输入可以作为调度依赖还是仅作为内部数据集?
答案 0 :(得分:3)
这是一个旧的但我仍然遇到datafactory 2的问题所以如果有人来到这里寻找datafactory 2上的这个解决方案。 “等待完成”复选框设置隐藏在“高级”状态下。 “执行管道”活动的“设置”选项卡的一部分。只需检查它以获得所需的结果。
答案 1 :(得分:2)
我认为目前你有两个选择来解决这个问题。两者都不是真正理想的,但ADF中的任何内容都不是当前形式的理想选择!所以......
选项1
在第二个管道活动上执行时间片延迟或偏移。如果不重新配置切片,延迟将更容易更改,并且可以添加到活动中。这不是事件驱动的,但会给你一点控制以避免重叠。
"policy": {
"timeout": "1.00:00:00",
"delay": "02:00:00", // <<<< 2 hour delay
"concurrency": 1,
检查此页面以获取有关这两个属性及其使用位置的更多信息:https://docs.microsoft.com/en-us/azure/data-factory/data-factory-scheduling-and-execution
选项2
打破PowerShell并使用更高级别的东西来控制它。
例如,使用 Get-Azure Rm数据工厂活动窗口来检查第一个管道状态。然后,如果完全使用 Set-AzureRmDataFactorySliceStatus 将第二个管道数据集更新为准备就绪。
OR
使用暂停 - Azure Rm数据工厂管道
在管道级别执行此操作有关ADF PowerShell cmdlet的详细信息,请访问:https://docs.microsoft.com/en-gb/powershell/module/azurerm.datafactories/Suspend-AzureRmDataFactoryPipeline?view=azurermps-4.0.0
正如我所说,这两个选项都不理想,你已经在你的问题中提到过数据集链接。
希望这有帮助。
答案 2 :(得分:0)
在该管道的所有输出数据集处于Ready状态(管道成功完成时发生)之后,管道完成。
此外,管道可以将来自多个管道的多个数据集作为输入(也是输出)。在这种情况下,只有在所有先前的管道成功完成后才会启动管道。如果您有更多管道的数据集作为输入,它们将异步运行,具体取决于它们的计划。
外部数据集(输入)充当调度依赖性,因为它们可以拥有自己的(可能是不同的)可用性。
在多个输入的上下文中,我已阅读有关调度依赖性的信息。那么外部输入可以作为调度依赖还是仅作为内部数据集?