【问题标题】:How to Trigger ADF Pipeline from Synapse Pipelines如何从 Synapse 管道触发 ADF 管道
【发布时间】:2021-11-08 21:16:44
【问题描述】:
问题
由于内部要求,我需要运行 Synapse 管道,然后触发 ADF 管道。似乎没有 Microsoft 批准的方法来执行此操作。管道不经常运行(每周或每月),ADF 管道必须在 Synapse 管道之后运行。
选项
似乎其他答案提供了几种选择:
- Azure 函数。创建一个调用 ADF 管道上的 CreatePipelineRun 函数的 Azure 函数。在 Synapse 管道的末尾,插入一个调用 Azure 函数的块。
- 使用 REST API 和 Web 活动。使用 REST API 调用 run the ADF pipeline。在 Synapse 管道的末尾插入一个 Web Activity 块以进行 API 调用。
- 表和轮询。将一条记录插入托管数据库中的表中,其中包含有关 Synapse 管道运行的数据。从 ADF 管道定期轮询以检查新记录并在准备好时运行。
- 存储事件。在 Synapse 运行结束时创建一个带时间戳的 blob 文件。使用 ADF 中的“存储事件触发器”来触发 ADF 管道。
问题
其中哪一个最接近“已批准”选项?这些有什么明显的缺点吗?
【问题讨论】:
标签:
azure
triggers
azure-data-factory
azure-synapse
azure-data-factory-pipeline
【解决方案1】:
正如您所提到的,对于这个问题没有“认可”的解决方案。你提到的所有方法都有优点和缺点,应该有效。对我来说,选项#3 非常成功。我们基于 Azure SQL 中的表和存储过程构建了一个队列管理器。我们使用逻辑应用来处理可以是计划、Blob 事件或 REST 调用的触发器。这些逻辑应用通过存储过程将作业插入到队列表中。几乎任何系统都可以直接调用该存储过程,因此您的 Synapse 管道可以插入队列作业来执行 ADF 管道。其他好处包括所有管道运行的日志、对多个数据工厂(以及现在的 Synapse 工作区)的支持,以及我们围绕数据库进行管理和跟踪的 Web 界面。
我们还有 2 个处理队列的其他逻辑应用(一个状态管理器和一个执行器)。这些持续运行(每 1 分钟和每 3 分钟)。检查状态和创建管道运行的操作均作为 .NET Azure Functions 实现 [您需要针对 Synapse 与 ADF 的不同 SDK]。该系统每月运行数千个管道,有时甚至更多,跨越众多数据工厂和 Synapse 工作区。
这里的 PRO 很多,但这种断开连接的方法允许您系统的各个方面独立运行。而且它很灵活,您几乎可以将任何系统绑定到队列中。您需要在不同系统中执行另一个管道的管道示例就是一个完美的例子。
这里的缺点是这是最复杂的方法。如果这是您要解决的开关问题,请选择其他选项之一。