如何通过Azure Data Factory将本地SFTP文件夹数据导入Azure SQL数据库
基于Azure Data Factory的SFTP CSV到Azure SQL全流程实现方案
1. 前置依赖准备
- 配置ADF的SFTP链接服务:确保ADF可访问指定SFTP服务器,配置时填好主机地址、端口、认证方式(密码/SSH密钥)
- 配置Azure Blob存储链接服务:用于暂存SFTP拉取的原始文件,建议开启冷存储降低成本
- 配置Azure SQL链接服务:授予ADF对应表的INSERT/ALTER权限(校验环节可能需要临时表操作权限)
- 提前在Azure SQL中创建好和CSV一一对应的目标表,确保列名、数据类型和CSV字段匹配
2. 核心流水线设计
整个流程用一条触发器驱动的流水线实现,触发器按需求设置为每日/每周定时触发:
2.1 第一步:批量拉取SFTP文件到Blob暂存
用Copy活动实现:
- 源数据集选SFTP的指定文件夹路径,设置通配符
*.csv匹配所有CSV文件,需要遍历子文件夹时开启「递归遍历」即可 - 接收器选Blob存储的临时容器,建议保留原始文件名,按上传日期分区存储(比如路径格式为
raw/sftp_data/yyyyMMdd/),方便后续溯源 - 该步可开启二进制复制,不对文件做解析,保证原始文件完整拉取
2.2 第二步:单文件校验+写入
拉取完成后用Get Metadata活动获取Blob暂存路径下的所有CSV文件列表,接着接For Each活动遍历每一个文件:
For Each内部的执行逻辑为:
- 校验环节:根据业务规则选择校验方式:
- 基础校验:用Lookup活动读取CSV文件,校验列数是否匹配目标表、是否有缺失必填字段、数据格式是否合法(比如日期字段格式是否符合要求)
- 自定义校验:如果有复杂业务规则,可调用Azure Function活动或者存储过程活动,传入文件路径后执行自定义校验逻辑,校验不通过的文件移动到Blob的错误目录,触发告警通知
- 写入Azure SQL环节:校验通过的文件用Copy活动写入对应Azure SQL表:
- 源数据集选当前遍历的CSV文件,设置好分隔符、编码格式、是否包含表头
- 接收器选对应Azure SQL表,写入模式选追加或者upsert根据业务需求决定,列映射会自动匹配同名的CSV字段和表字段,不一致的手动调整即可
- 大文件可开启批量插入、分块复制提升写入性能,避免超时
- 归档环节:写入完成后,将处理成功的CSV文件移动到Blob的归档目录,可按需求定期清理或者长期留存
3. 可选优化项
- 针对大文件可开启ADF的容错功能,跳过错误行,错误行输出到单独的日志文件方便排查
- 配置流水线告警,任务失败或者校验不通过时自动发通知
- 如果CSV和表的对应关系是动态的,可以提前在Azure SQL中建一张映射关系表,For Each活动中先查询映射关系匹配对应的目标表,不需要为每个文件单独建活动
- 不需要额外引入SSIS流水线,原生ADF活动已经可以覆盖全流程需求,运维成本更低
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

