Synapse/ADF 管道为数据库表中的每条记录发出 HTTP API 请求

问题描述 投票:0回答:1

我有一个表,里面有 120,000 条记录。这将是我的源表。
对于表中的每条记录,我想向 REST API 发送请求,然后进行存储过程调用。必须这样做是有原因的,我不想在这里一一详细说明。

我知道我可以使用 Lookup Activity 来执行此操作,该 Activity 将查找表(最多 5,000 个)项目,然后我可以对此数组执行 For Each 操作,并且对于 For Each 的每次迭代,我使用 Web Activity 来执行此操作发出 REST API 请求。然后调用存储过程活动。

但是,要做到这一点,我需要向存储过程或查询添加一堆分页变量(跳过等)。然后我必须有一个嵌套的 For Each (第一个 ForEach 执行分页并且查找活动位于其中。第二个 For Each 迭代页面集中的每个记录)。但是,您不能将 For Each 嵌套在另一个 ForEach 中,因此我必须创建另一个管道并从 foreach 中执行它,以执行它自己的 foreach 并将数组传递到该管道。

这种复杂的方法真的是唯一的方法吗?

这是一个非常简单的过程,执行以下操作: 对于每条记录 { 调用休息API }

azure-data-factory azure-synapse oracle-adf azure-synapse-pipeline
1个回答
0
投票

由于查找有 5000 行的限制,您需要 设计一个两级管道,其中外部管道迭代内部管道,从而检索不超过最大行数或大小的数据。根据文档 .

因此,可能的解决方案是,使用带有变量的查找查询进行分页,然后将此输出传递给另一个管道参数以对其进行迭代并分别调用其余 API 和存储过程。

要对查询进行分页,您可以按照以下格式。

  • 首先取名称为 counter 且初始值为
    @string(0)   -  0
    的变量,如下: enter image description here
  • 然后进行直到活动,您可以循环记录直到完成。有条件
    @equals('120000', variables('counter'))
    enter image description here
  • 在内部直到使用变量将增加的值存储为温度计第 i 个值
    variables('counter')
    enter image description here
  • 现在您可以使用此变量通过 fetch 和 offset 对查询进行分页。在偏移量中,您可以保留创建的计数器变量的值,并且获取的值恒定为 5000 行。
  • 现在将输出 Paas 到另一个管道的变量,以迭代输出并通过执行管道活动调用该管道,因为 ADF 不支持嵌套循环。
  • 现在采用另一个设置变量来增加初始值,因为
    @string(add(int(variables('tempCounter')),5000))
    它将在初始值上添加 5000。 enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.