如何在ADF Data Flow中实现REST API动态分页批量导入数据?
在ADF Data Flow中实现REST API的Range式分页批量导入
针对你需要用Data Flow扁平化REST API数据并批量导入Azure SQL Server的需求,以下是实现$top/$skip动态分页的具体步骤:
1. 定义Data Flow分页参数
在Data Flow中创建两个整数类型参数:
pageSize:设置每页加载的记录数(比如你需求中的400)currentSkip:控制每次请求需要跳过的记录数,初始值设为0
2. 配置REST源的动态请求参数
在REST数据源的Query Parameters面板中,添加以下参数:
$expand:填入你需要展开的字段(如xx,yy,zz)$top:使用表达式引用参数$pageSize$skip:使用表达式引用参数$currentSkip
这样每次运行Data Flow时,会自动生成类似abc?$expand=xx,yy,zz&$top=400&$skip=0的请求URL,实现分页查询。
3. 用ADF管道实现分页循环
Data Flow单次仅处理单页数据,需要结合管道的循环逻辑完成批量导入:
- 步骤3.1:获取总记录数
添加一个Web活动,调用API获取总记录数(OData API可通过追加$count=true实现,从返回结果中提取@odata.count值存入管道变量totalRecords) - 步骤3.2:计算总页数
用表达式计算总页数(向上取整):div(add(variables('totalRecords'), variables('pageSize')-1), variables('pageSize')) - 步骤3.3:循环调用Data Flow
添加ForEach活动,循环范围基于总页数,在循环体内:- 调用Data Flow,传入
pageSize和currentSkip参数 - 更新
currentSkip变量:setVariable('currentSkip', add(variables('currentSkip'), variables('pageSize')))
- 调用Data Flow,传入
如果API不支持返回总记录数,可改用Until活动循环:每次调用Data Flow后判断返回行数是否为0,为空则停止循环。
4. 在Data Flow中扁平化数据
通过Flatten转换处理嵌套结构:
- 选择需要展开的嵌套数组字段(比如示例中的
Trips) - 设置展开模式为
Array,映射嵌套字段到扁平列,确保与目标SQL表结构匹配
5. 配置Azure SQL Sink
在Sink转换中选择Azure SQL数据集:
- 设置写入方式为
Append,保证每次分页数据追加到目标表 - 完成字段映射,确保扁平化后的列与SQL表列一一对应
注意事项
- 确认REST API支持
$top和$skip参数,若API使用其他参数名(如limit/offset),需同步调整Query Parameters配置 - 若API有速率限制,可在循环中添加Wait活动控制请求频率
内容的提问来源于stack exchange,提问作者David Kade
相关产品推荐
相关产品推荐

