将超5000行的SharePoint列表批量导入Azure Data Factory
核心思路:利用SharePoint REST API分页机制
SharePoint REST API默认单页最多返回5000条数据,超过阈值时会在响应中返回下一页的请求地址,我们可以在ADF中通过循环调用接口实现全量数据拉取。
具体操作步骤
1. 创建分页控制变量
在ADF管道中添加两个变量:
- nextLink:字符串类型,初始值为空,用于存储下一页的API请求地址
- isFinish:布尔类型,初始值为
false,标记数据是否拉取完成
2. 添加循环容器(Until活动)
添加一个Until活动,设置终止条件为@variables('isFinish') == true,即数据拉取完成后终止循环。
3. 循环内配置Web活动调用SharePoint API
Web活动基础配置:
- 请求URL:如果nextLink为空,使用初始请求地址:
若nextLink已有值,则直接使用变量值:@concat('https://<你的租户域名>.sharepoint.com/sites/<目标站点名>/_api/web/lists/getbytitle(''<目标列表名>'')/items?$top=5000')@variables('nextLink') - 请求方法:选择
GET - 身份验证:采用OAuth2.0,需提前在Azure AD注册应用并授予
Sites.Read.All权限,确保能读取目标列表数据
- 请求URL:如果nextLink为空,使用初始请求地址:
更新分页变量:
从Web活动的输出中检查是否存在@odata.nextLink,若存在则将其赋值给nextLink,否则将isFinish设为true。使用如下表达式:@if(contains(activity('<你的Web活动名称>').output, '@odata.nextLink'), activity('<你的Web活动名称>').output['@odata.nextLink'], '')
4. 分页数据写入Blob存储
在Web活动之后添加Copy活动,将API返回的分页数据写入Blob:
- 数据源:选择Web活动输出,数据集类型为JSON,数据路径设置为
@activity('<你的Web活动名称>').output.value - 数据目标:选择你的Blob存储数据集,设置为追加模式,避免覆盖已拉取的分页数据
5. 合并数据并写入SQL Server
所有分页拉取完成后,添加一个Copy活动完成最终数据写入:
- 数据源:指向Blob存储中的所有分页JSON文件,使用通配符路径(如
container/folder/*.json),开启合并文件选项 - 数据目标:连接到你的SQL Server数据库表,完成全量数据写入
注意事项
- 确保Azure AD应用的权限配置正确,否则会出现数据读取权限不足的问题
$top参数最大值为5000,若列表数据量极大,可适当减小该值避免请求超时- 可为Web活动配置重试机制,应对网络波动导致的请求失败
内容的提问来源于stack exchange,提问作者CGarden
相关产品推荐
相关产品推荐

