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

启用暂存的Data Factory/Synapse复制任务无文件时失败求助

解决ADLS Gen2到Synapse专用池复制活动无文件时的失败问题

问题场景

我们有一个元数据驱动的管道,用于将ADLS Gen2数据湖中存储的Parquet文件复制到Synapse专用SQL池:

  • 管道遍历源容器列表,通过最后修改时间过滤处理每个容器中的新文件
  • 因需在插入专用池前添加日志列,启用了暂存功能

当前问题:当未找到新文件时,复制活动的暂存步骤仍会执行,后续从暂存到Synapse的步骤因临时位置无文件而失败。尝试过用Get Metadata活动做前置检查,但常规Get Metadata不支持递归检查,而动态递归列表方案开销过大无法采用。

可行解决方案

方案1:开启复制活动的「允许无数据」配置

这是最直接的方案,通过复制活动的内置设置避免无文件时的失败:

  1. 打开复制活动的Settings标签页
  2. 找到Allow no data选项并勾选
  3. 启用后,当源路径下无匹配过滤条件的文件时,复制活动会标记为「成功」,不会执行后续暂存到Synapse的步骤,自然避免失败

方案2:用Lookup活动做低开销的前置文件检查

通过Lookup活动快速判断是否存在符合条件的文件,仅在有文件时执行复制活动:

  1. 添加一个Lookup活动,源数据集指向ADLS Gen2的目标文件夹(如raw/data/),开启递归选项
  2. 在数据集配置中,通过参数化设置最后修改时间过滤条件(匹配复制活动的过滤规则)
  3. 设置Lookup活动的Top count为1,这样只要找到1个符合条件的文件就停止查询,把开销降到最低
  4. 添加If Condition活动,判断表达式:@activity('你的Lookup活动名称').output.count > 0
    • 条件为真:执行复制活动
    • 条件为假:跳过复制活动,继续后续流程

方案3:错误捕获与容错处理

如果无法修改复制活动配置或前置检查,可通过错误分支处理无文件的失败场景:

  1. 点击复制活动的添加分支,选择On Failure
  2. 在失败分支中添加If Condition活动,判断错误是否为「无文件」:
    • 示例表达式:@contains(activity('你的复制活动名称').error.message, 'No files found') 或 @equals(activity('你的复制活动名称').error.code, '2200')
  3. 若判断为无文件错误:添加一个空的Set Variable活动(或直接不做操作),让流程继续执行,不终止
  4. 若判断为其他错误:保留原有失败逻辑,抛出错误

内容的提问来源于stack exchange,提问作者Koen van Wielink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:05:22