Azure Synapse Pipeline:如何按文件名日期而非修改日期筛选文件?
按文件名内嵌日期筛选Azure Synapse Pipeline文件的方案
Get Metadata活动的「Filter by last modified」选项仅支持基于文件实际修改日期筛选,无法直接识别文件名中内嵌的日期,所以得通过后续步骤实现需求,具体操作如下:
- 保留现有Get Metadata1活动,仅用来获取目标存储路径下的所有子项(
childItems),不要在该活动中设置任何日期过滤条件 - 添加一个Filter活动,放在Get Metadata1和ForEach循环之间:
- 输入设置为
@activity('Get Metadata1').output.childItems - 过滤规则配置:
- 提取文件名中的日期部分:如果你的文件名都是「8位日期_xxx」格式,用表达式
@substring(item().name, 0, 8);如果日期是第一个下划线前的内容,也可以用@split(item().name, '_')[0] - 条件判断:判断提取出的日期字符串是否在
BeginRange和EndRange参数范围内,表达式示例:@and(greaterOrEquals(substring(item().name, 0, 8), pipeline().parameters.BeginRange), lessOrEquals(substring(item().name, 0, 8), pipeline().parameters.EndRange))
- 提取文件名中的日期部分:如果你的文件名都是「8位日期_xxx」格式,用表达式
- 输入设置为
- 修改ForEach循环的输入为
@activity('Filter1').output.Value,这样循环只会处理符合日期条件的文件
注意事项
- 确保
BeginRange和EndRange参数的格式与文件名中的日期格式完全一致(比如都是YYYYMMDD字符串) - 如果文件名的日期位置或格式有变化,需要调整日期提取的表达式适配不同场景
内容的提问来源于stack exchange,提问作者CFCJB John
相关产品推荐
相关产品推荐

