ADF 通过 SQL 表更改触发管道的建议方式

Posted

技术标签:

【中文标题】ADF 通过 SQL 表更改触发管道的建议方式【英文标题】:Suggested way for ADF to trigger pipeline by SQL table change 【发布时间】:2021-09-23 06:32:44 【问题描述】:

我有一个跟踪 SQL 表,它具有以下架构:

CREATE TABLE [dbo].[TEST_TABLE](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [value] [nvarchar](50) NULL,
    [status] [nvarchar](50) NULL,
    [source] [nvarchar](50) NULL,
    [timestamp] [datetime] NULL
)

我的应用程序代码将通过插入记录和更新字段status来自动维护表。

我的目标是根据以下查询的结果触发 ADF 管道:

SELECT COUNT(1) AS cnt FROM [dbo].[TEST_TABLE] WHERE [status] = 'active'

如果结果 >0,则触发 ADF 管道。

当前状态:

我目前的工作:

    设置存储过程SP_TEST,如果条件满足则返回1;否则 0 设置如下管道:

SP的结果被解析并用于路由触发后面的阶段(这会将SQL表状态标记为'inactive'以避免重复处理) 3. 将管道与每 5 分钟一次的调度触发器相关联。

我目前的工作是“工作”,也就是说它可以每5分钟检测一次DB是否发生变化并执行后续处理。

问题:

但是,调度触发器可能过于频繁,并且每次执行都会花费活动运行单元,这可能会很昂贵。有没有类似“SQL table change trigger”之类的触发器?

我尝试过的:

一个快速的谷歌将我指向这个link,但似乎还没有答案。

我也知道存储事件触发器和自定义事件触发器。不幸的是,我们不允许创建其他 Azure 资源。我们只提供现有的 ADF 和 SQL 服务器。

提前了解任何见解/方向。

【问题讨论】:

长轮询数据库是目前唯一可用的解决方案。如果您担心管道运行过多,您可以将轮询检查移至逻辑应用程序,并让它仅在发现新行时执行管道。当然,这需要能够创建新的 Azure 资源。 感谢@JoelCochran 的建议,这对我来说也很有意义。在我带着你的见解回到我的天蓝色管理员之前,我会再多呆一会儿看看是否有其他人有新的意见:) 【参考方案1】:

使用 ADF 进行轮询可能会很昂贵,我们希望避免这种情况。而是在 Azure 逻辑应用程序中进行轮询,这样会便宜得多。以下是侦听 SQL Server DB(包括 Azure)然后在发现表更改时触发 ADF 管道的步骤。

这是 Azure Logic App 的定价:

我相信这意味着每个触发器都使用标准连接器,因此每 1000 次应用触发需要 12.5 美分 (USD),每触发 1000 次操作需要 2.5 美分 (USD)。

对于 ADF,每 1000 次活动是 1 美元 (USD),因此对于 ADF 来说要贵得多

如果您有任何问题,请告诉我!

【讨论】:

首先感谢@TrentTamura 的解决方案 :) 目前我不允许创建其他 Azure 资源。如果没有其他选择,将与我的 Azure 管理员沟通 :) :) 告诉他每月可以节省 X 美元。 感谢@TrentTamura。我们的 Azure 管理员听取了您的建议,我们将为此构建 Azure 逻辑应用程序。非常感谢您的帮助:D

以上是关于ADF 通过 SQL 表更改触发管道的建议方式的主要内容,如果未能解决你的问题,请参考以下文章

使用 ADF 调用存储过程

如何从 Synapse 管道触发 ADF 管道

如何在 Azure ADF Pipelines 中更改 ADF 接收器数据集 Parquet 文件数据类型

Azure ADF 管道复制数据日志文件未触发第二个管道的“已创建 Blob”触发器

ADF V2 - 基于表列参数化数据复制管道

如何在 SQL 中创建临时表以用于多个 ADF 活动?