如何在Azure Data Factory中实现多文件批量存在性校验
Azure Data Factory 批量日期后缀文件校验方案
完全可以不用创建30个独立Validation活动实现需求,以下是两种可落地的实现方式:
方案1:ForEach循环+单Validation活动(支持等待文件生成场景)
适用于需要等待文件陆续生成、每个文件有独立校验超时要求的场景:
- 第一步:生成目标日期数组
可以通过Set Variable活动创建包含所有待校验日期的数组,如果你需要动态生成30天的日期序列,可以直接用表达式实现:@range(0,30)生成0-29的整数序列后,通过循环内的addToTime()函数把起始日期(如2021-07-01)逐个加对应天数,格式化为yyyy_MM_dd的字符串格式,也可以手动写死数组:@createArray('2021_07_01','2021_07_02',...,'2021_08_01') - 第二步:添加ForEach活动,将上一步生成的日期数组作为ForEach的输入项集合
- 第三步:在ForEach活动内部添加1个Validation活动,文件路径用动态表达式拼接:
@concat('你的目标文件夹路径/file_', item(), '.txt')
其中item()对应当前循环遍历到的日期字符串 - 第四步:按需求配置Validation活动的超时时间、重试策略即可
方案2:Get Metadata批量校验(无需循环,效率更高)
适用于只需要一次性校验所有文件是否已存在、不需要等待文件陆续生成的场景:
- 第一步:先生成包含所有目标文件名的数组,示例:
@createArray('file_2021_07_01.txt','file_2021_07_02.txt',...,'file_2021_08_01.txt') - 第二步:添加Get Metadata活动,指向目标文件所在的文件夹,勾选「Child Items」字段,执行后会返回该路径下所有文件的名称列表
- 第三步:添加If Condition活动,写入判断表达式:
@equals(intersection(variables('target_file_list'), activity('Get_Metadata').output.childItems), variables('target_file_list'))
原理是用intersection()函数取目标文件数组和实际存在的文件数组的交集,如果交集和目标文件数组完全一致,说明所有目标文件都存在 - 第四步:在If Condition的「False」分支添加终止管道、抛出错误的逻辑即可,存在缺失文件时会触发该分支
内容的提问来源于stack exchange,提问作者leuction
相关产品推荐
相关产品推荐

