通过Azure Data Factory从OneDrive多文件夹复制Excel至SQL数据库遇阻
解决Azure Data Factory从OneDrive多文件夹复制Excel文件到SQL数据库的问题
方案1:通过Microsoft Graph API + ADF活动实现
- 步骤1:获取文件列表
使用ADF的Web活动调用Microsoft Graph API,遍历OneDrive的多层文件夹:- 根文件夹内容查询:
GET https://graph.microsoft.com/v1.0/me/drive/root:/{你的根文件夹路径}:/children - 递归处理子文件夹:对返回的文件夹类型项,重复调用上述接口(替换路径为子文件夹路径),收集所有Excel文件的
id - 身份验证:配置OAuth 2.0,使用Azure AD注册应用的客户端ID、密钥、租户ID,确保应用拥有
Files.Read.All权限
- 根文件夹内容查询:
- 步骤2:批量复制文件
将收集到的文件ID存入ADF数组变量,用ForEach活动遍历:- 调用
GET https://graph.microsoft.com/v1.0/me/drive/items/{file-id}/createLink生成临时读取链接(权限设为read) - 用复制活动,源选择
HTTP连接器,填入临时链接并配置Excel格式;目标选择SQL数据库,映射对应字段
- 调用
方案2:借助Logic Apps中转文件
- 创建Logic Apps工作流,定时扫描OneDrive的目标文件夹及子文件夹,收集所有Excel文件
- 将文件内容同步到Azure Blob Storage(作为中间存储)
- 在ADF中使用Blob Storage连接器读取文件,再通过复制活动写入SQL数据库
- 此方法无需手动处理API递归,Logic Apps内置OneDrive连接器原生支持多层文件夹遍历
SharePoint/Office 365连接器失败排查
- 权限配置错误:确认ADF使用的托管身份或服务主体已获得OneDrive对应站点的读取权限,需在Azure AD中分配
Sites.Read.All或Files.Read.All权限 - 路径格式问题:使用SharePoint连接器时,需输入个人OneDrive的站点URL(格式为
https://{租户名}-my.sharepoint.com/personal/{用户邮箱前缀}_{租户名}_onmicrosoft_com),文件夹路径要精确匹配 - 文件状态异常:确保Excel文件未被锁定、未加密,且是ADF支持的格式(.xlsx、.xls,不支持受保护工作簿)
内容的提问来源于stack exchange,提问作者Ruchika Agarwal
相关产品推荐
相关产品推荐

