Как удалить файлы и подкаталоги из папки, но не саму папку, с помощью ADF

Как удалить все файлы и все подкаталоги из папки, но не удалять саму папку в Azure Fileshare с помощью ADF? По сути, в конце удаления должна быть пустая папка.

Я попытался использовать действие удаления с параметром «Путь к файлу в наборе данных», но оно удаляет всю исходную папку.

Я также пробовал использовать путь к файлу с подстановочным знаком = «*», но он удаляет только файлы и не может удалять подкаталоги.

Это моя структура папок. Я хочу удалить файлы и подпапки, отмеченные красной диагональной линией. В качестве примера вы можете использовать папку EXPORT/IN/REF-A.

Я знаю, что могу использовать метаданные Foreach и Get, но поскольку данные папки, которые мне нужно удалить, представляют собой массив, а ADF не допускает вложенности действий, мне нужно будет создать дополнительный конвейер, что приведет к дополнительным затратам, и мой клиент не устраивает такой подход.

Благодарен за вашу помощь.

не могли бы вы предоставить структуру папок?

Bhavani 05.08.2024 11:47

Спасибо за ваш комментарий. Я только что добавил структуру папок в описание вопроса. Пожалуйста, проверьте это.

Nguyen Tung Son 05.08.2024 11:58

Вы хотите удалить все файлы и подпапки внутри папки экспорта, и она должна остаться пустой?

Bhavani 05.08.2024 12:00

Я хочу удалить все файлы и подпапки внутри папки REF-A, и после удаления папка REF-A пуста.

Nguyen Tung Son 05.08.2024 12:01
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете следовать нижеприведенному подходу для достижения вашего требования:

Вот структура папки:

Используйте действие получения метаданных, чтобы перечислить элементы в папке 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": []
    }
}

Я искренне ценю вашу помощь. Я попробую.

Nguyen Tung Son 06.08.2024 05:57

Спасибо за вашу помощь. Это сработало. Вы спасли мой день.

Nguyen Tung Son 06.08.2024 09:55

Другие вопросы по теме

Построитель выражений фабрики данных Azure: ошибка структурирования JSON с помощью вложенных массивов и объектов
Динамический SQL-запрос в конвейере ADF
Фабрика данных Azure: выбор свойств не поддерживается для значений типа «Целое число»
Невозможно выполнить блокнот Databricks из фабрики данных Azure
Конвейер фабрики данных Azure возвращает значение родительскому конвейеру и коммутатору
Как реализовать дополнительную нагрузку на АПД
Как получить метаданные (список общих файловых ресурсов) учетной записи хранения и настроить действие копирования данных для копирования черно-белых учетных записей хранения в ADF?
Дополнительные файлы (блочные BLOB-объекты), создаваемые при копировании хранилища BLOB-объектов в ADF
Как скопировать все контейнеры без явного упоминания в массиве между двумя разными учетными записями хранения
Data Factory Parquet неправильно принимает десятичные дроби

Похожие вопросы