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 表更改触发管道的建议方式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Azure ADF Pipelines 中更改 ADF 接收器数据集 Parquet 文件数据类型