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

Azure Data Factory:从SFTP到Blob的增量数据加载方案咨询

SFTP到Azure Blob的每日增量加载实现方案

嘿,针对你的需求——已经完成历史.lta.gz文件的一次性加载,现在要每日增量拉取SFTP上新增的不可修改/删除文件,我整理了几个在Azure Data Factory (V2)里的靠谱实现思路,适配你的场景:

核心原则

因为SFTP上的文件不会被修改或删除,我们的核心目标就是精准识别并只处理新增文件,避免重复复制浪费资源。


方案1:用ADF内置增量复制(推荐,最快落地)

ADF本身就支持基于文件属性的增量复制,完全适配你的场景:

  • 配置SFTP数据集时,在「连接」选项卡的「文件筛选器」中,选择按最后修改时间筛选,设置筛选条件为@adddays(utcnow(), -1)(如果你的触发器是每天凌晨运行,就取前一天0点到当天0点的文件,可根据调度时间调整表达式)
  • 给管道配置每日时间触发器,设置固定运行时间(比如每天凌晨2点)
  • 注意:如果SFTP服务器用的是本地时区,一定要在数据集的「高级」选项里设置对应时区,避免时间判断出错
  • 优势:不需要额外维护追踪数据,ADF自动帮你过滤已处理过的文件;如果担心重名文件(虽然你说文件不可修改删除,应该不会出现),可以在Blob数据集里设置「如果文件已存在」的处理规则(比如重命名或报错)

方案2:用水印表精准追踪(适合需要审计的场景)

如果需要记录每个文件的复制状态、做审计,或者文件名没有规律、时间属性不可靠,可以用存储来维护水印表:

  • 第一步:在Azure SQL DB或者Storage Account的表存储里创建一张水印表,字段至少包含FileName(文件名)、CopyCompletedTime(复制完成时间)、Status(成功/失败)
  • 第二步:在管道里添加查找活动,查询水印表获取所有已成功复制的文件名列表
  • 第三步:添加Get Metadata活动,获取SFTP服务器目标目录下的所有文件列表(勾选「子项」选项)
  • 第四步:添加筛选活动,把当前SFTP文件列表和已复制列表对比,筛选出未复制的文件
  • 第五步:用ForEach活动循环处理筛选后的文件,调用复制活动把文件传到Blob
  • 第六步:复制完成后,用存储过程活动(SQL DB)或者复制活动(表存储)把新复制的文件名和状态写入水印表
  • 优势:完全可控,能追踪每个文件的处理状态,适合复杂场景

方案3:基于文件名规则筛选(最简单,依赖命名规范)

如果SFTP上的新增文件名有固定规律(比如带日期后缀,像order_20240520.lta.gz),可以直接通过文件名筛选:

  • 在SFTP数据集的「文件筛选器」里,用参数化的文件名表达式,比如@concat('order_', formatDateTime(utcnow(), 'yyyyMMdd'), '.lta.gz')
  • 配合每日时间触发器,每天只拉取对应日期的文件
  • 优势:配置最简单,不需要额外逻辑;但前提是文件名必须严格遵循规范,否则会漏拉文件

额外实用提示

  • 处理.lta.gz压缩文件:ADF支持直接读取GZip压缩文件,不需要提前解压——在SFTP数据集的「压缩」选项卡,设置压缩类型为GZip即可
  • 错误处理:在复制活动的「重试」设置里添加失败重试机制(比如重试3次,每次间隔5分钟),同时可以把复制失败的文件名写入Blob的日志文件,方便排查
  • 性能优化:如果每日新增文件数量多,可以把ForEach活动的「并行度」设置为5-10,提升批量复制的速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:23:44