Azure Data Factory如何获取Azure Blob Storage中最新时间戳命名的文件夹
基于Azure Blob时间戳命名文件夹的最新目录获取方案(适配ADF流水线)
方案1:ADF原生活动实现(无额外依赖)
该方案无需引入额外Azure服务,直接通过ADF内置活动完成逻辑:
- 首先使用Get Metadata活动,关联指向目标Blob容器的数据集(数据集无需指定具体路径,配置为二进制格式即可),字段列表选择
Child items,如果容器下文件夹总数超过1000,需要在活动设置页开启Pagination选项拉取全量子项。 - 新增Filter活动,输入绑定Get Metadata的
Child items输出,过滤条件设置为@equals(item().type, 'Folder'),过滤掉子项中的文件,仅保留所有文件夹条目。 - 提前在流水线变量中定义一个数组类型变量
folderList,新增ForEach活动遍历Filter输出的文件夹列表,每次遍历执行@union(variables('folderList'), createArray(item().name))把所有文件夹名追加到数组中。 - 新增Set Variable活动定义排序后的数组变量
sortedFolderList,值设置为@sort(variables('folderList')),如果你的时间戳命名为yyyyMMddHHmmss/2024-05-20-12-30这类从左到右按年-月-日-时-分-秒单位排序的格式,字符串排序结果和时间先后顺序完全一致,排序后数组的最后一个元素就是最新文件夹。 - 最终通过
@last(variables('sortedFolderList'))即可获取最新文件夹名,直接传入后续复制活动/数据流处理该目录下的所有文件即可。
提示:如果你的时间戳命名是反向递减格式,排序后取数组第一个元素即可得到最新文件夹。
方案2:Azure Function预处理(适配复杂命名规则场景)
如果时间戳命名格式特殊,原生字符串排序无法匹配时间顺序,可通过该方案实现:
- 编写Python/C#语言的HTTP触发Azure Function,代码逻辑为:通过Azure Storage SDK连接目标Blob容器,拉取所有文件夹名,把文件夹名转换为DateTime类型后排序,取最新文件夹名作为接口返回值。
- 在ADF流水线中新增Azure Function活动调用上述接口,直接拿到返回的最新文件夹名即可开展后续处理,该方案资源消耗极低,成本几乎可忽略。
内容的提问来源于stack exchange,提问作者JARVIS
相关产品推荐
相关产品推荐

