我有一个URL,它基于以下详细信息返回响应JSON:
https://testapi/dev?user=reportuser
Call type: POST
Body: {
"name": "Employee Data",
"pageSize": "10000",
"nextTableName": "EMPLOYEE",
"nextKey": "1",
"tables": [
{
"tableName": "EMPLOYEE",
"columns": [
"FIRST_NAME",
"LAST_NAME",
"ADDRESS",
]
}
]
}
Response JSON:
{
"data": {
"EMPLOYEE": [
{
"FIRST_NAME":"Rahul",
"LAST_NAME":"Sharma",
"ADDRESS":"UK"
},
{
"FIRST_NAME":"Albert",
"LAST_NAME":"Wintermeyer",
"ADDRESS":"Australia"
},
...
...
],
"pagination": [
{
"nextTableName": "EMPLOYEE",
"nextKey": "10001"
}
]
}
}
为了解释url是如何工作的,它返回从第一个when开始的前10000条记录(因为nextKey:1)。
如果我想查询下一个10000条记录,我用10001替换body中的nextKey,它将返回10001到20001的所有记录。
我们不断调用这些函数,直到nextKey在响应中返回0。
我想将这些数据移动到Azure SQL数据库,我正在使用Azure数据工厂。我尝试使用Web活动,但有效负载限制为4MB。由于这种无休止的呼叫数量需要作出到达终点。
我所读过的所有文章都建议使用分页规则的直接方法,即。e.在响应json中,我将链接到下一个名为nextLink的数据集。在我的例子中,我只得到一个数字(nextKey)。
我如何使用复制数据活动的分页规则,以一种方式,我可以发送整个正文与新的nextKey值和url再次。
注意:这是一个POST调用,因此每次都必须发送body(使用新的nextkey值)。
1条答案
按热度按时间a11xaf1n1#
我使用了复制数据活动的分页规则,我可以再次发送整个正文与新的nextKey值和url。
AFAIK,不能直接将API响应取到API体。你也检查这个类似的issue。
您可以按照以下方法实现您的场景:
首先创建一个set变量,存储next key,值为1。
然后执行一个until活动来检查结束条件如果
nextkey
等于0则停止迭代。然后在until循环中采用一个复制活动将数据从rest API复制到SQL,并将body传递为
因此,它将从set变量中获取下一个键的值,然后调用响应并将其复制到SQL表中。
然后再次使用Web Activity调用相同的API,以从具有与上述相同请求主体的API响应中获取
nextkey
值。在此之后,使用另一个set变量来更新
nextkey
值,我们之前使用web活动响应nextkey
设置。因此,它将更新
nextkey
值,并在until循环中基于该值再次迭代,直到它与condition匹配。