You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse Pipeline如何递归分页调用REST API拉取全量数据

方案结论

完全可以在Azure Synapse Pipeline中实现分页拉取全量数据的需求,不需要用到递归逻辑,用内置的Until循环活动即可实现,整套流程无代码即可配置完成,最终可以直接把全量数据下沉到ADLS2或者专用SQL池。

具体配置步骤
  • 先在管道级别定义两个变量:nextEndpoint,初始值设为你的REST接口根地址;hasMore,初始值设为true。
  • 添加Until活动,设置活动的停止判断条件为@equals(variables('hasMore'), false),循环会一直执行直到该条件触发。
  • 在Until活动内部添加Web活动,用于调用REST接口:URL参数填@variables('nextEndpoint'),认证方式按你接口的要求配置(比如API密钥、OAuth2等)。
  • 在Web活动后添加复制活动:源数据集直接读取Web活动返回的items数组,取值表达式为@activity('你配置的Web活动名称').output.items;目标数据集选你要下沉的存储介质,ADLS2可选存为Parquet/JSON格式,专用SQL池可以直接写入提前建好的对应结构的表,也可以开启复制活动的自动建表能力。
  • 在复制活动后添加两个设置变量的活动:第一个更新hasMore变量,取值为@activity('你配置的Web活动名称').output.hasMore;第二个更新nextEndpoint变量,从返回的links数组中提取下一页的请求地址,表达式可以写为@first(where(activity('你配置的Web活动名称').output.links, x -> equals(x.rel, 'next'))).href,最后一页没有next链接时该取值会为空,此时hasMore已经为false,循环会自动停止,不会报错。
可选优化建议
  • 如果你不想解析links数组,也可以额外新增一个offset变量,初始值为0,每次循环结束后给offset加1000,直接拼接成新的请求地址@concat('[你的REST接口根地址]?limit=1000&offset=', variables('offset')),逻辑更简单不易出错。
  • 写入ADLS2时建议每次循环生成独立的文件,文件名加上当前offset值或者时间戳,避免文件覆盖,后续处理直接读取整个文件夹即可。
  • 如果接口有调用频率限制,可以在循环的最后加一个等待活动,设置1~2秒的等待时间,避免触发限流规则。

内容的提问来源于stack exchange,提问作者mfarinella14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:54:03