Как удалить все файлы и все подкаталоги из папки, но не удалять саму папку в Azure Fileshare с помощью ADF? По сути, в конце удаления должна быть пустая папка.
Я попытался использовать действие удаления с параметром «Путь к файлу в наборе данных», но оно удаляет всю исходную папку.
Я также пробовал использовать путь к файлу с подстановочным знаком = «*», но он удаляет только файлы и не может удалять подкаталоги.
Это моя структура папок. Я хочу удалить файлы и подпапки, отмеченные красной диагональной линией. В качестве примера вы можете использовать папку EXPORT/IN/REF-A.
Я знаю, что могу использовать метаданные Foreach и Get, но поскольку данные папки, которые мне нужно удалить, представляют собой массив, а ADF не допускает вложенности действий, мне нужно будет создать дополнительный конвейер, что приведет к дополнительным затратам, и мой клиент не устраивает такой подход.
Благодарен за вашу помощь.
Спасибо за ваш комментарий. Я только что добавил структуру папок в описание вопроса. Пожалуйста, проверьте это.
Вы хотите удалить все файлы и подпапки внутри папки экспорта, и она должна остаться пустой?
Я хочу удалить все файлы и подпапки внутри папки REF-A, и после удаления папка REF-A пуста.
Вы можете следовать нижеприведенному подходу для достижения вашего требования:
Вот структура папки:
Используйте действие получения метаданных, чтобы перечислить элементы в папке REF-A со списком полей. Дочерние элементы со следующим набором данных:
Вы получите вывод, как показано ниже:
В случае успеха операции с метаданными добавьте операцию foreach с элементами @activity('Get Metadata1').output.childItems
. Добавьте одно действие удаления, чтобы удалить подпапки с путем к каталогу параметра набора данных для каталога со значением @concat('files/d1/EXPORT/IN/REF-A/',item().name)
, как показано ниже:
набор данных src1:
Добавьте еще одно действие удаления для удаления файлов в папке REF-A с именем файла параметра набора данных для имени файла со значением @item().name
, как показано ниже:
набор данных src2:
Отладка конвейера приведет к удалению всех файлов и подпапок внутри папки REF-A, а папка REF-A останется пустой, как показано ниже:
Вот конвейер Json для справки:
{
"name": "pipeline1",
"properties": {
"activities": [
{
"name": "Get Metadata1",
"type": "GetMetadata",
"dependsOn": [],
"policy": {
"timeout": "0.12:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"dataset": {
"referenceName": "b1",
"type": "DatasetReference"
},
"fieldList": [
"childItems"
],
"storeSettings": {
"type": "AzureFileStorageReadSettings",
"enablePartitionDiscovery": false
},
"formatSettings": {
"type": "BinaryReadSettings"
}
}
},
{
"name": "ForEach1",
"type": "ForEach",
"dependsOn": [
{
"activity": "Get Metadata1",
"dependencyConditions": [
"Succeeded"
]
}
],
"userProperties": [],
"typeProperties": {
"items": {
"value": "@activity('Get Metadata1').output.childItems",
"type": "Expression"
},
"isSequential": true,
"activities": [
{
"name": "Delete1",
"type": "Delete",
"dependsOn": [],
"policy": {
"timeout": "0.12:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"dataset": {
"referenceName": "src1",
"type": "DatasetReference",
"parameters": {
"directorypath": {
"value": "@concat('files/d1/EXPORT/IN/REF-A/',item().name)",
"type": "Expression"
}
}
},
"enableLogging": false,
"storeSettings": {
"type": "AzureFileStorageReadSettings",
"recursive": true,
"enablePartitionDiscovery": false
}
}
},
{
"name": "Delete2",
"type": "Delete",
"dependsOn": [
{
"activity": "Delete1",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "0.12:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"dataset": {
"referenceName": "src2",
"type": "DatasetReference",
"parameters": {
"filename": {
"value": "@item().name",
"type": "Expression"
}
}
},
"enableLogging": false,
"storeSettings": {
"type": "AzureFileStorageReadSettings",
"recursive": true,
"enablePartitionDiscovery": false
}
}
}
]
}
}
],
"annotations": []
}
}
Я искренне ценю вашу помощь. Я попробую.
Спасибо за вашу помощь. Это сработало. Вы спасли мой день.
не могли бы вы предоставить структуру папок?