ADF 在 REST 服务 POST 请求上复制数据活动分页

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

我对使用 Azure 数据工厂 (ADF) 还很陌生,但遇到了问题。

我想将数据从 RESTAPI 存储到 Azure SQL 数据库中。由于结果数量太多,我必须使用分页。最初,我使用 GET 请求设置了复制数据活动,并在 ADF 中配置了分页规则。这就像一个魅力。

但是,对于我的用例,我需要按排序顺序返回数据,这需要我发出 POST 请求。我在 Postman 中运行了测试,该测试按预期工作,但我似乎无法让它在我的复制数据活动中工作。

这是第一个请求的 POST 正文示例。

{
 "query":  {
    "field": "name",
    "operator": "=",
    "value": "alex"
  },
  "pagination": {
    "per_page": 5,
  } 
}

这是一个示例响应:

{
  "pages": {
  "type": "pages",
  "next": {
    "page": 4,
    "starting_after": "1HaSB+xrOyyMXAkS/c1RteCL7BzOzTvYjmjakgTergIH31eoe2v4/sbLsJWP\nIncfQLD3ouPkZlCwJ86F\n"
  },
  "page": 3,
  "per_page": 5,
  "total_pages": 10
  }
}

从这个响应中,我需要从“starting_after”中获取值并将其包含在下一个请求的请求正文中。看起来像这样:

{
 "query":  {
    "field": "name",
    "operator": "=",
    "value": "alex"
  },
  "pagination": {
    "per_page": 5,
    "starting_after": "1HaSB+xrOyyMXAkS/c1RteCL7BzOzTvYjmjakgTergIH31eoe2v4/sbLsJWP\nIncfQLD3ouPkZlCwJ86F\n"
  } 
}

我的问题是,我似乎无法找出如何从 ADF 分页配置中的响应正文获取值到 POST 请求正文中。

我尝试过使用变量,但这似乎并没有按照我喜欢的方式工作。

我可以尝试的另一种方法是使用“直到”活动和嵌套的“Web”活动来自己迭代请求。我无法想象这是正确的方法,因为这正是复制数据活动的设计目的。

我附上了一张图片。分页部分是如何处理 GET 请求的,但它不适用于 POST。 Screenshot

rest post pagination azure-data-factory
1个回答
0
投票

根据 文档 ADF 分页适用于以下情况:

此通用 REST 连接器支持以下分页模式:

  • 下一个请求的绝对或相对 URL = 当前响应正文中的属性值
  • 下一个请求的绝对或相对 URL = 当前响应标头中的标头值
  • 下一个请求的查询参数=当前响应体中的属性值
  • 下一个请求的查询参数=当前响应头中的头值
  • 下一个请求的 header = 当前响应正文中的属性值
  • 下一个请求的 header = 当前响应 header 中的 header 值

不支持在请求体中获取响应体值。

我可以尝试使用“Until”活动和嵌套的“Web”活动来自己迭代请求。

我们唯一的解决方法是使用until循环和一些变量来存储下一次迭代的值。 enter image description here 对于上图,您需要按照以下步骤操作:

  • 首先采取复制活动来复制第一次迭代的数据,其中请求正文中的starting_after值不需要。
  • 然后采取网络活动来获取第一次迭代的 starting_after 值。
  • 然后使用 Set 变量来存储您从之前的 Web 活动中获取的值。
  • 然后进行以下活动直至进行活动。

enter image description here

-- 第一个设置变量活动将存储您从直到活动的 ousider 变量获得的值 -- 用于获取每次迭代的 starting_after 值的 Web 活动。 -- 复制活动以使用该值并复制数据。 -- 第二个设置变量来存储从网络活动获取的 starting_after 值。 -- 设置变量以交换第一个设置变量与第二个设置变量的值。

这是您可以根据您的要求在 ADF 中开发的示例逻辑

© www.soinside.com 2019 - 2024. All rights reserved.