Azure Data Factory管道复制ADLS数据如何实现无数据时任务失败
源ADLS无匹配数据时触发复制任务失败的实现方案
ADF的复制活动默认对“源端零匹配数据”的场景会判定为运行成功,这是产品的原生设计,可通过以下两种可直接落地的配置实现目标判定逻辑:
方案1:前置增加数据源校验链路(适配文件级复制场景)
- 在现有复制活动的上游依次添加
Get Metadata活动、If Condition活动,在判断分支的空流程中连接一个Fail活动 - 将Get Metadata活动的源数据集配置为和复制活动的源ADLS数据集完全一致,绑定相同的开始、结束时间筛选参数:如果是判断匹配路径下的批量文件/文件夹数量,就勾选输出属性为
itemCount;如果是校验单个指定文件是否存在,就勾选输出属性为exists - 配置If Condition的判断逻辑:批量文件场景下写入表达式
@greater(activity('Get Metadata').output.itemCount, 0),单文件场景下写入表达式@activity('Get Metadata').output.exists,逻辑为仅当匹配到的目标存在时,才进入后续复制流程 - 将原有复制活动连接到If Condition的True分支;将Fail活动连接到If Condition的False分支,可自定义报错提示内容,比如“本次调度时间窗口内源ADLS未查询到符合条件的数据,管道运行终止”
- 注意:如果你的ADLS路径是按日期做动态拼接的(比如按年/月/日层级存储的分区路径),要确保Get Metadata的数据集路径和复制源的动态路径拼接规则完全一致,避免出现路径不匹配导致的校验失效。
方案2:直接在复制活动中配置最低成功行数阈值(适配结构化数据复制场景)
- 打开复制活动的设置面板,找到“容错”配置板块,定位到最低成功行数 选项
- 将该参数的值设置为1,配置完成后,只要本次复制活动从源端拉取的有效数据行数小于1(即零行),活动就会直接抛出错误、判定为运行失败
- 注意不要混淆“最低成功行数”和“允许的错误行数”配置:后者是设置多少条错误数据仍可判定活动成功,和“零行即失败”的逻辑完全无关,不要配置错参数
- 这个方案不需要额外添加其他活动,配置成本更低;但该配置仅对结构化数据的行数统计生效,如果你的作业是复制整个文件到目标存储(不涉及逐行读取统计),该配置不会识别“零文件”的场景,还是需要使用方案1完成校验。
配置完成后建议做一次有效性验证:手动将管道的筛选时间参数调整到历史无数据的时间窗口,触发一次手动运行,确认管道会按预期判定为失败,避免因动态路径绑定错误、参数映射偏差导致校验逻辑失效。
内容的提问来源于stack exchange,提问作者Antony
相关产品推荐
相关产品推荐

