我很难从adf管道中删除数据湖中的文件夹。我尝试了类似的方法,因为我通过使用get metadata
活动和delete
活动中的ForEach
活动来删除文件,无法完成。
所以每天我写一个快照数据和文件路径看起来像这样-〉快照/表名/文件卸载时的日期-这是基本的GETUTCDATE格式yyyyMMddHHmmss
。
所以路径= snapshot/tablename/yyyyMMddHHmmss/*.parquet
我的目标是删除tablename
文件夹中所有超过5天的文件夹。
任何提示赞赏。
2条答案
按热度按时间uajslkp61#
我的目标是删除
tablename
文件夹中所有超过5天的文件夹。您可以通过使用下面的过滤器活动来实现您的要求。
首先创建一个整数参数,值为
-(n-1)
,其中n是天数。然后使用以下表达式在set变量中创建yyyyMMdd
的最后第n天。@addDays(utcnow(),pipeline().parameters.ndays,'yyyyMMdd')
然后使用 meta活动获取文件夹列表。
这些是我的文件夹:
现在,将此子项数组提供给筛选活动。筛选活动筛选超过5天的文件夹名称。
过滤项:
@activity('Get Metadata1').output.childItems
过滤条件:
@greater(int(variables('last_5thday')), int(substring(item().name,0,8)))
Filter将给予如下的输出数组。
将这个数组作为
@activity('Filter1').output.Value
交给ForEach,并在ForEach内部使用delete活动。对于删除活动,使用dataset参数作为文件夹名称,如下所示。
给予
@item().name
作为ForEach中delete活动的参数值。您可以看到超过5天的文件夹在管道执行后被删除。
以下是我的Pipeline JSON,供大家参考:
62lalag42#
您可以尝试以下方法:
1.添加int数据类型的管道参数“Iteration”,其值为“-5”
1.添加具有项表达式的foreach活动为
@createArray(1,2,3,4,5)
1.在foreach中,使用通配符文件路径
@concat(addDays(utcNow(),add(pipeline().parameters.Iteration,item()),'yyyyMMdd*'),'*.parquet')
添加删除活动如果需要,可以根据文件路径调整表达式。