如何使用ADF从文件共享中获取最新日期对应的文件
Azure数据工厂(ADF)获取共享文件中最新日期文件的实现方案
核心实现逻辑
你的文件命名为固定前缀+日期时间戳的规则,可以通过解析文件名提取时间排序,也可以直接通过文件最后修改时间排序实现需求,以下是可直接落地的配置步骤:
方案一:按文件名时间戳提取(精度最高,不受文件上传时间影响)
步骤1:获取目标目录下所有文件列表
- 添加
Get Metadata活动,关联你文件共享对应的链接服务,配置数据集指向csv文件存放的目录,数据集不需要填写具体文件名。 - 在
Get Metadata活动的字段列表配置项中,添加Child Items属性,该属性会返回目录下所有文件、文件夹的名称集合。
步骤2:过滤符合命名规则的csv文件
- 添加
Filter活动,输入项设置为@activity('Get Metadata').output.childItems - 过滤条件配置为:
该条件会过滤掉目录下所有不符合命名规则的其他文件,避免干扰后续计算。@and(startswith(item().name, 'xyz_activation_'), endswith(item().name, '.csv'))
步骤3:提取文件时间信息并排序
- 先在管道变量面板创建两个变量:
- 数组类型变量
fileInfoList,用于存储每个文件的文件名和对应的时间戳 - 字符串类型变量
latestFileName,用于存储最终取到的最新文件名
- 数组类型变量
- 添加
For Each活动,输入项设置为@activity('Filter').output.value,请务必勾选活动配置中的「顺序」选项,避免并行执行导致变量追加异常 - 在
For Each活动内部添加Append Variable活动,选择变量为fileInfoList,追加值配置为:
这段表达式会从文件名中提取时间字符串并转为ADF可识别的datetime类型,用于后续排序对比。@json(concat('{"fileName":"', item().name, '","timestamp":"', datetime(split(split(item().name, '.csv')[0], 'activation_')[1])}')) For Each活动执行完成后,添加Set Variable活动,选择变量为latestFileName,取值配置为:
该表达式会将所有符合规则的文件按时间戳倒序排序,取排在第一位的文件名,就是你需要的最新日期对应的文件。@first(sort(variables('fileInfoList'), desc(item().timestamp))).fileName
步骤4:后续使用
后续的复制、数据流等操作,直接在数据集的动态文件名处引用@variables('latestFileName')即可。
方案二:按文件最后修改时间提取(配置更简单,适用于文件上传时间和命名时间一致的场景)
如果你的文件是生成后立即上传,不会修改旧文件的最后修改时间,可以直接用更简单的配置:
- 在
Get Metadata活动的字段列表中额外添加Last Modified属性 - 直接通过如下表达式获取最新文件:
@first(sort(activity('Get Metadata').output.childItems, desc(item().lastModified))).name
内容的提问来源于stack exchange,提问作者subham das
相关产品推荐
相关产品推荐

