我对使用 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”活动来自己迭代请求。我无法想象这是正确的方法,因为这正是复制数据活动的设计目的。
根据 文档 ADF 分页适用于以下情况:
此通用 REST 连接器支持以下分页模式:
- 下一个请求的绝对或相对 URL = 当前响应正文中的属性值
- 下一个请求的绝对或相对 URL = 当前响应标头中的标头值
- 下一个请求的查询参数=当前响应体中的属性值
- 下一个请求的查询参数=当前响应头中的头值
- 下一个请求的 header = 当前响应正文中的属性值
- 下一个请求的 header = 当前响应 header 中的 header 值
不支持在请求体中获取响应体值。
我可以尝试使用“Until”活动和嵌套的“Web”活动来自己迭代请求。
我们唯一的解决方法是使用until循环和一些变量来存储下一次迭代的值。 对于上图,您需要按照以下步骤操作:
-- 第一个设置变量活动将存储您从直到活动的 ousider 变量获得的值 -- 用于获取每次迭代的 starting_after 值的 Web 活动。 -- 复制活动以使用该值并复制数据。 -- 第二个设置变量来存储从网络活动获取的 starting_after 值。 -- 设置变量以交换第一个设置变量与第二个设置变量的值。
这是您可以根据您的要求在 ADF 中开发的示例逻辑