Azure Data Factory使用Filter活动筛选Blob容器最新日期文件夹问题
问题排查
原筛选逻辑存在两个核心问题:
- 表达式逻辑冗余无意义:
int(replace(item().name, '-', ''))已经把单个文件夹名转成了整数,外层套array()、max()之后返回的还是这个整数本身,只要这个整数大于0就会通过校验,所以所有名称可转为正整数的文件夹都会被返回,完全没有实现日期格式校验、筛选最新的效果。 - 缺少日期格式校验逻辑:原逻辑无法排除名称是数字但不符合
YYYY-MM-DD格式的文件夹(比如20231301、2023-02-30这类无效日期命名的文件夹也会通过筛选)。
正确实现步骤
步骤1:配置Filter活动筛选符合日期格式的文件夹
Filter活动的Items输入选择Get Metadata活动输出的ChildItems数组,筛选条件使用如下表达式:
@isDate(item().name, 'yyyy-MM-dd')
这个表达式会自动校验文件夹名称是否符合
YYYY-MM-DD的有效日期格式,只有符合要求的文件夹会进入Filter的输出结果。
步骤2:提取最新日期的文件夹名称
在Filter活动后新增一个「设置变量」活动,提前在管道中创建一个字符串类型的变量(比如命名为LatestDateFolder),变量赋值使用如下表达式:
@formatDateTime(max(select(activity('Filter').output.value, toDate(item().name, 'yyyy-MM-dd'))), 'yyyy-MM-dd')
表达式逻辑说明:先通过
select函数把Filter输出的所有符合格式的文件夹名转为日期类型,再用max函数取最大的日期值,最后格式化回YYYY-MM-DD格式就得到了最新的日期文件夹名。
内容的提问来源于stack exchange,提问作者Cline Colaco
相关产品推荐
相关产品推荐

