如何在Azure Data Factory中按日期筛选ADLG2多文件(忽略时分秒)
解决ADF中Get Metadata仅提取单个当日文件的问题(忽略时间戳)
问题核心在于你之前的逻辑是匹配精确到时分秒的最后修改时间点,而非当日的时间区间,所以只能命中单个文件。以下是两种直接可行的解决方案:
方案1:在Get Metadata数据集里直接筛选当日时间区间
- 先通过
Set Variable活动生成当日的时间边界:- 创建变量
var_StartOfDay,表达式:@startOfDay(utcnow())(若需指定特定日期,替换utcnow()为你的日期参数) - 创建变量
var_EndOfDay,表达式:@endOfDay(utcnow())
这两个变量分别对应当日00:00:00和23:59:59的时间戳。
- 创建变量
- 配置Get Metadata的ADLG2数据集:
- 开启文件筛选,选择
Last modified条件,设置为介于var_StartOfDay和var_EndOfDay之间。 - 或者直接在数据集的动态表达式里写筛选逻辑:
@greaterOrEquals(item().lastModified, variables('var_StartOfDay')) && @lessOrEquals(item().lastModified, variables('var_EndOfDay'))
- 开启文件筛选,选择
方案2:用Filter活动过滤Get Metadata的文件列表
如果不想在数据集层面筛选,可以先获取全量文件再过滤:
- 配置Get Metadata活动,勾选
Child items字段,获取ADLG2目标路径下的所有文件信息。 - 添加
Filter活动,输入选择Get Metadata输出的childItems,过滤条件用日期格式化对比:
这个表达式会把每个文件的最后修改时间转为@equals(formatDateTime(item().lastModified, 'yyyy-MM-dd'), formatDateTime(utcnow(), 'yyyy-MM-dd'))年-月-日格式,和目标日期完全匹配时保留该文件,最终得到当日所有文件集合。
注意事项
- 时区一致性:如果ADLG2文件的最后修改时间是本地时区(而非UTC),需在表达式中加入时区转换,比如
convertTimeZone(utcnow(), 'UTC', 'China Standard Time')。 - 历史日期适配:若要提取非当日的历史日期文件,只需把
utcnow()替换为你的目标日期变量即可。
内容的提问来源于stack exchange,提问作者Temidayo Omoniyi
相关产品推荐
相关产品推荐

