Azure Data Factory循环拉取100行限制API全量数据的方案问询
Azure Data Factory 实现REST API全量分页数据拉取方案
核心思路
针对每页仅返回100条的REST API,需通过分页参数控制+循环终止判断结合ADF活动实现全量拉取,核心是根据API的分页机制(页码/偏移量/续传令牌)选择对应循环方式,同时确保每次拉取的数据追加到SQL目标表。
实现方案(分两种场景)
场景1:API返回总记录数
如果API响应包含总记录数(如totalCount字段),用For Each循环更高效:
获取总记录数并计算总页数
- 用
Lookup活动调用API的初始请求(或元数据接口),提取响应中的totalCount值 - 用
Set Variable活动计算总页数:@ceil(div(int(activity('Lookup_TotalCount').output.firstRow.totalCount), 100)) - 生成页码/偏移量数组:比如页码数组用
@range(1, int(variables('totalPages'))),偏移量数组用@range(0, int(variables('totalPages')), 100)
- 用
循环拉取并追加数据
- 配置
For Each活动,遍历生成的页码/偏移量数组 - 循环内嵌套
Copy Data活动:- 源:REST数据集,在
Relative URL或Query Parameters中传入动态分页参数,比如@concat('?page=', item(), '&pageSize=100')(页码模式)或@concat('?offset=', item(), '&limit=100')(偏移量模式) - 目标:SQL表,写入方式选择追加(Append)
- 源:REST数据集,在
- 配置
场景2:API仅返回下一页续传令牌(nextToken)
如果API不返回总记录数,仅通过响应体/响应头返回nextToken标记下一页,用Until活动循环直到无续传令牌:
初始化变量
- 创建字符串变量
nextToken,初始值为空 - 创建布尔变量
hasMoreData,初始值设为true
- 创建字符串变量
循环拉取数据
- 配置
Until活动,终止条件设为@equals(variables('hasMoreData'), false) - 循环内依次执行:
- Copy Data活动:REST源传入动态参数
@if(empty(variables('nextToken')), '', concat('?nextToken=', variables('nextToken'))),SQL目标选追加模式 - Lookup活动:从API响应中提取
nextToken值,比如@activity('Copy_CurrentPage').output.response.nextToken(根据实际响应结构调整) - Set Variable活动:更新
nextToken为Lookup返回的值,同时判断如果nextToken为空,将hasMoreData设为false以终止循环
- Copy Data活动:REST源传入动态参数
- 配置
关键配置细节
- REST分页参数绑定:优先在
Copy Data活动源的Query Parameters中配置动态参数,比直接拼接URL更规范 - SQL写入模式:必须设置为追加,避免每次循环覆盖已有数据
- 动态变量取值:确保通过
@activity('ActivityName').output正确提取API响应中的分页标记或总记录数 - 错误处理:可在循环内添加
Try Catch活动,对API请求失败场景设置重试逻辑
简化方案:ADF自动分页(如果API支持)
若API符合OData规范或支持标准分页格式,可直接开启REST数据集的自动分页功能:
- 在REST数据集的
Pagination设置中,选择对应分页模式(如Next page link in response body或Next page link in response header) - 只需配置一个
Copy Data活动,ADF会自动拉取所有分页数据,SQL目标选追加模式即可完成全量同步
内容的提问来源于stack exchange,提问作者Leachyboy007
相关产品推荐
相关产品推荐

