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