如何使用Azure Data Factory获取分区数据的最后修改日期
解决方案
核心实现逻辑为两层嵌套的Get Metadata+For Each组合,先遍历上层分区文件夹,再遍历分区内的文件做过滤筛选,具体操作步骤如下:
步骤1:配置第一层Get Metadata活动
- 数据集指向根目录
product_data/,字段列表勾选子项和最后修改时间 - 活动输出的子项结果即为所有
DATE_ID=xxx格式的分区文件夹列表
步骤2:配置第一层For Each循环
- 输入参数设置为
@activity('第一层Get Metadata活动名称').output.childItems,有并发控制需求可勾选顺序执行 - 循环内先添加过滤活动,过滤条件设置为
@equals(item().type, 'Folder'),确保只处理分区文件夹,跳过根目录下可能存在的非文件夹内容
步骤3:配置第二层Get Metadata活动
将该活动放在第一层For Each循环内部:
- 数据集配置动态路径:
product_data/@{item().name}/,字段列表勾选子项、最后修改时间 - 活动输出结果即为当前分区文件夹下的所有文件列表,包含parquet文件和committed标记文件
步骤4:配置第二层For Each循环
将该活动放在第一层For Each循环内部,紧跟第二层Get Metadata活动:
- 输入参数设置为
@activity('第二层Get Metadata活动名称').output.childItems - 循环内添加过滤活动,设置两个过滤条件:
@endsWith(item().name, '.parquet'):仅保留parquet格式的文件@greaterOrEquals(item().lastModified, addHours(utcnow(), -24)):仅保留近24小时内有修改的文件
步骤5:结果输出
- 过滤后符合条件的文件,可通过追加变量活动存储结果,变量定义为数组类型,单条存储值可参考格式:
{ "分区名称": "@{item(0).name}", "parquet文件名": "@{item().name}", "最后修改时间": "@{item().lastModified}" } - 如果仅需要去重后的分区名称,可在所有循环执行完成后,对结果数组按分区名称字段去重即可得到近24小时有修改的分区列表
注意:数据集对应的存储链接服务需要开启目录列表、属性读取权限,否则无法正常读取多级子项的修改时间信息。
内容的提问来源于stack exchange,提问作者Mariah Akinbi
相关产品推荐
相关产品推荐

