提问人:user1060500 提问时间:11/17/2023 最后编辑:user1060500 更新时间:11/17/2023 访问量:36
Synapse/ADF 管道对数据库表中的每条记录发出 HTTP API 请求
Synapse/ADF Pipeline to Make HTTP API Request for every record in a database table
问:
我有一个包含 120,000 条记录的表。这将是我的源表。
对于表中的每条记录,我想向 REST API 发送请求,然后进行存储过程调用。这是有原因的,我不想在这里一一阐述。
我知道我可以使用查找活动来执行此操作,该活动将查找表(最多 5,000 个)项目,然后我可以在此数组上执行 For Each,对于 For Each 的每次迭代,我使用 Web 活动发出 REST API 请求。然后调用存储过程活动。
但是,为此,我需要将一堆分页变量(skip 等)添加到存储过程或查询中。然后,我必须有一个嵌套的 For Each(第一个 ForEach 执行分页,查找活动位于其中......第二个 For Each 迭代页面集中的每条记录)。但是,您不能将 For Each 嵌套在另一个 ForEach 中,因此我必须创建另一个管道并从 foreach 中执行该管道以执行它自己的 foreach 并将数组传递给该管道。
这种错综复杂的方法真的是唯一的方法吗?
这是执行以下操作的非常简单的过程: 对于每条记录 { 调用 Rest API }
答:
0赞
Pratik Lad
11/17/2023
#1
由于查找具有 5000 行的限制,因此需要设计一个两级管道,其中外部管道循环访问内部管道,该管道检索不超过最大行数或大小的数据。根据文件。
因此,可能的解决方案是,使用变量查找查询进行分页,然后将此输出传递给另一个管道参数以对其进行迭代并分别调用其余 API 和存储过程。
要对查询进行分页,可以遵循以下格式。
- 首先取名称为计数器和初始值的变量,如下所示:
@string(0) - 0
- 然后进行 until 活动,您可以在其中循环记录直到完成。有条件
@equals('120000', variables('counter'))
- 在 take 变量中将递增的值存储为 tempcouner 第 i 个值
variables('counter')
- 现在,您可以使用此变量通过 fetch 和 offset 对查询进行分页。在偏移量中,您可以保持创建的计数器变量的值,并且 fetch 恒定 5000 行。
- 现在,ADF 不支持将输出输出到另一个管道的变量以迭代输出,并使用执行管道活动作为嵌套循环调用该管道。
- 现在取另一个设置变量来增加初始值,因为它会在初始值上增加 5000。
@string(add(int(variables('tempCounter')),5000))
评论