Функция удаления в Фабрике данных Azure и Azure Synapse Analytics
ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
С помощью действия Delete в Фабрике данных Azure можно удалять файлы или папки из локальных или облачных хранилищ. Используйте это действие для очистки или архивирования файлов, когда они больше не нужны.
Предупреждение
Восстановить удаленные файлы и папки нельзя (если только в хранилище не включено обратимое удаление). Учитывайте это при использовании действия Delete для удаления файлов или папок.
Рекомендации
Здесь приведено несколько рекомендаций по использованию действия Delete.
Создавайте резервные копии файлов перед их удалением с помощью действия Delete на случай, если вам потребуется восстановить эти файлы в будущем.
Убедитесь, что у службы имеются права на запись для удаления папок или файлов из хранилища.
Убедитесь, что вы не удаляете файлы, которые записываются одновременно.
Если вы хотите удалить файлы или папку из локальной системы, убедитесь, что вы используете локальную среду выполнения интеграции с версией более 3.14.
Поддерживаемые хранилища данных
- Хранилище BLOB-объектов Azure
- Azure Data Lake Storage 1-го поколения
- Azure Data Lake Storage 2-го поколения
- Файлы Azure
- Файловая система
- FTP
- SFTP
- Microsoft Fabric Lakehouse
- Amazon S3
- Совместимое хранилище Amazon S3
- Google Cloud Storage
- Хранилище Oracle Cloud
- HDFS
Создание действия Delete с помощью пользовательского интерфейса
Чтобы использовать действие Delete в конвейере, выполните следующие действия:
Выполните поиск Delete в области "Действия" конвейера и перетащите действие Delete на холст конвейера.
Выберите новое действие "Удалить" на холсте, если оно еще не выбрано, и ее вкладка "Источник ", чтобы изменить его сведения.
Выберите существующий или создайте новый набор данных, указав удаляемые файлы. Если выбрано несколько файлов, можно включить рекурсивное удаление, при котором данные также удаляются из всех дочерних папок. Можно также указать максимальное количество одновременных подключений для операции.
При необходимости настройте ведение журнала. Выберите вкладку Параметры ведения журнала, затем выберите существующее или создайте новое расположение в учетной записи связанной службы для ведения журнала, чтобы регистрировать результаты выполненных операций удаления.
Синтаксис
{
"name": "DeleteActivity",
"type": "Delete",
"typeProperties": {
"dataset": {
"referenceName": "<dataset name>",
"type": "DatasetReference"
},
"storeSettings": {
"type": "<source type>",
"recursive": true/false,
"maxConcurrentConnections": <number>
},
"enableLogging": true/false,
"logStorageSettings": {
"linkedServiceName": {
"referenceName": "<name of linked service>",
"type": "LinkedServiceReference"
},
"path": "<path to save log file>"
}
}
}
Свойства типа
Свойство | Описание: | Обязательное поле |
---|---|---|
набор данных | Предоставляет ссылку на набор данных, чтобы определить, какие файлы или папки должны быть удалены. | Да |
recursive | Указывает, откуда файлы удаляются рекурсивно: из вложенных папок или только из указанной папки. | № Значение по умолчанию — false . |
maxConcurrentConnections | Количество одновременных подключений к хранилищу с целью удаления папок или файлов. | № Значение по умолчанию — 1 . |
включение ведения журнала | Указывает, нужно ли записывать удаленные папки или имена файлов. Если значение равно true, необходимо дополнительно предоставить учетную запись хранения для сохранения файла журнала, чтобы можно было в нем отслеживать поведение действия Delete. | No |
logStorageSettings | Это свойство применимо, только если для параметра enablelogging установлено значение true. Группа свойств хранилища, которые можно указать, где нужно сохранить файл журнала, содержащий имена папок или файлов, удаленных действием Delete. |
No |
linkedServiceName | Это свойство применимо, только если для параметра enablelogging установлено значение true. Связанная служба служба хранилища Azure, Azure Data Lake Storage 1-го поколения или Azure Data Lake Storage 2-го поколения для хранения файла журнала, содержащего имена папок или файлов, удаленных действием Delete. Следует иметь в виду, что для удаления файлов необходимо настроить тот же тип Integration Runtime, что использовался операцией удаления. |
No |
path | Это свойство применимо, только если для параметра enablelogging установлено значение true. Путь, по которому хранится файл журнала в учетной записи хранения. Если вы не предоставляете путь, служба создает контейнер для вас. |
No |
Наблюдение
Отслеживать результаты действия Delete можно в двух местах:
- выходные данные действия Delete;
- файл журнала.
Пример выходных данных действия Delete
{
"datasetName": "AmazonS3",
"type": "AmazonS3Object",
"prefix": "test",
"bucketName": "adf",
"recursive": true,
"isWildcardUsed": false,
"maxConcurrentConnections": 2,
"filesDeleted": 4,
"logPath": "https://sample.blob.core.windows.net/mycontainer/5c698705-a6e2-40bf-911e-e0a927de3f07",
"effectiveIntegrationRuntime": "MyAzureIR (West Central US)",
"executionDuration": 650
}
Пример файла журнала действия Delete
Имя. | Категория | Состояние | Ошибка |
---|---|---|---|
test1/yyy.json | Файлы | Удален | |
test2/hello789.txt | Файлы | Удален | |
test2/test3/hello000.txt | Файлы | Удален | |
test2/test3/zzz.json | Файлы | Удален |
Примеры использования действия Delete
Удаление конкретных файлов или папок
Хранилище состоит из следующей структуры папок:
Root/
Folder_A_1/
1.txt
2.txt
3.csv
Folder_A_2/
4.txt
5.csv
Folder_B_1/
6.txt
7.csv
Folder_B_2/
8.txt
Теперь вы используете действие Delete для удаления папки или файлов с помощью сочетания различных значений свойств из набора данных и действия Delete:
folderPath | fileName | recursive | Выходные данные |
---|---|---|---|
Root/ Folder_A_2 | NULL | False | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Root/ Folder_A_2 | NULL | Истина | Root/ Folder_A_1/ 1.txt 2.txt 3.csv |
Root/ Folder_A_2 | *.txt | False | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Root/ Folder_A_2 | *.txt | Истина | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 7.csv Folder_B_2/ |
Периодическое очищение разделенных по времени папок или файлов
Вы можете создать конвейер для периодической очистки разделенных по времени папок или файлов. Например, со структурой папок, похожей на /mycontainer/2018/12/14/*.csv
. Вы можете использовать переменную системы службы из триггера расписания, чтобы определить, какую папку или файлы следует удалить в каждом запуске конвейера.
Пример конвейера
{
"name":"cleanup_time_partitioned_folder",
"properties":{
"activities":[
{
"name":"DeleteOneFolder",
"type":"Delete",
"dependsOn":[
],
"policy":{
"timeout":"7.00:00:00",
"retry":0,
"retryIntervalInSeconds":30,
"secureOutput":false,
"secureInput":false
},
"userProperties":[
],
"typeProperties":{
"dataset":{
"referenceName":"PartitionedFolder",
"type":"DatasetReference",
"parameters":{
"TriggerTime":{
"value":"@formatDateTime(pipeline().parameters.TriggerTime, 'yyyy/MM/dd')",
"type":"Expression"
}
}
},
"logStorageSettings":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"path":"mycontainer/log"
},
"enableLogging":true,
"storeSettings":{
"type":"AzureBlobStorageReadSettings",
"recursive":true
}
}
}
],
"parameters":{
"TriggerTime":{
"type":"string"
}
},
"annotations":[
]
}
}
Пример набора данных
{
"name":"PartitionedFolder",
"properties":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"parameters":{
"TriggerTime":{
"type":"string"
}
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"folderPath":{
"value":"@dataset().TriggerTime",
"type":"Expression"
},
"container":{
"value":"mycontainer",
"type":"Expression"
}
}
}
}
}
Пример триггера
{
"name": "DailyTrigger",
"properties": {
"runtimeState": "Started",
"pipelines": [
{
"pipelineReference": {
"referenceName": "cleanup_time_partitioned_folder",
"type": "PipelineReference"
},
"parameters": {
"TriggerTime": "@trigger().scheduledTime"
}
}
],
"type": "ScheduleTrigger",
"typeProperties": {
"recurrence": {
"frequency": "Day",
"interval": 1,
"startTime": "2018-12-13T00:00:00.000Z",
"timeZone": "UTC",
"schedule": {
"minutes": [
59
],
"hours": [
23
]
}
}
}
}
}
Очистите файлы с истекшим сроком хранения, которые подвергались модификации еще до 1 января 2018 г.
Конвейер можно создать для очистки старых или просроченных файлов с помощью фильтра атрибутов файла: LastModified в наборе данных.
Пример конвейера
{
"name":"CleanupExpiredFiles",
"properties":{
"activities":[
{
"name":"DeleteFilebyLastModified",
"type":"Delete",
"dependsOn":[
],
"policy":{
"timeout":"7.00:00:00",
"retry":0,
"retryIntervalInSeconds":30,
"secureOutput":false,
"secureInput":false
},
"userProperties":[
],
"typeProperties":{
"dataset":{
"referenceName":"BlobFilesLastModifiedBefore201811",
"type":"DatasetReference"
},
"logStorageSettings":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"path":"mycontainer/log"
},
"enableLogging":true,
"storeSettings":{
"type":"AzureBlobStorageReadSettings",
"recursive":true,
"modifiedDatetimeEnd":"2018-01-01T00:00:00.000Z"
}
}
}
],
"annotations":[
]
}
}
Пример набора данных
{
"name":"BlobFilesLastModifiedBefore201811",
"properties":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":"*",
"folderPath":"mydirectory",
"container":"mycontainer"
}
}
}
}
Перемещение файлов с помощью связывания действия копирования и действия Delete
Вы можете переместить файл, используя действие Copy для копирования файла, а затем действие Delete для удаления файла из конвейера. Если вы хотите переместить несколько файлов, можно использовать действие GetMetadata + действие Filter + действие ForEach + действие копирования + действие Delete, как показано в следующем примере.
Примечание.
Нужно быть осторожным, если вы хотите переместить всю папку, определив набор данных, содержащий только путь к папке, а затем используя действие Copy и действие Delete для указания ссылки на тот же набор данных, представляющий папку. Необходимо убедиться, что между операцией копирования и операцией удаления в папку не будут поступать новые файлы. Если же в папку поступили новые файлы сразу после того, как действие копирования завершило копирование файлов, а действие Delete еще не начало выполняться, то действие Delete может вместе с папкой удалить эти новые файлы, которые еще НЕ были скопированы в место назначения.
Пример конвейера
{
"name":"MoveFiles",
"properties":{
"activities":[
{
"name":"GetFileList",
"type":"GetMetadata",
"dependsOn":[
],
"policy":{
"timeout":"7.00:00:00",
"retry":0,
"retryIntervalInSeconds":30,
"secureOutput":false,
"secureInput":false
},
"userProperties":[
],
"typeProperties":{
"dataset":{
"referenceName":"OneSourceFolder",
"type":"DatasetReference",
"parameters":{
"Container":{
"value":"@pipeline().parameters.SourceStore_Location",
"type":"Expression"
},
"Directory":{
"value":"@pipeline().parameters.SourceStore_Directory",
"type":"Expression"
}
}
},
"fieldList":[
"childItems"
],
"storeSettings":{
"type":"AzureBlobStorageReadSettings",
"recursive":true
},
"formatSettings":{
"type":"BinaryReadSettings"
}
}
},
{
"name":"FilterFiles",
"type":"Filter",
"dependsOn":[
{
"activity":"GetFileList",
"dependencyConditions":[
"Succeeded"
]
}
],
"userProperties":[
],
"typeProperties":{
"items":{
"value":"@activity('GetFileList').output.childItems",
"type":"Expression"
},
"condition":{
"value":"@equals(item().type, 'File')",
"type":"Expression"
}
}
},
{
"name":"ForEachFile",
"type":"ForEach",
"dependsOn":[
{
"activity":"FilterFiles",
"dependencyConditions":[
"Succeeded"
]
}
],
"userProperties":[
],
"typeProperties":{
"items":{
"value":"@activity('FilterFiles').output.value",
"type":"Expression"
},
"batchCount":20,
"activities":[
{
"name":"CopyAFile",
"type":"Copy",
"dependsOn":[
],
"policy":{
"timeout":"7.00:00:00",
"retry":0,
"retryIntervalInSeconds":30,
"secureOutput":false,
"secureInput":false
},
"userProperties":[
],
"typeProperties":{
"source":{
"type":"BinarySource",
"storeSettings":{
"type":"AzureBlobStorageReadSettings",
"recursive":false,
"deleteFilesAfterCompletion":false
},
"formatSettings":{
"type":"BinaryReadSettings"
},
"recursive":false
},
"sink":{
"type":"BinarySink",
"storeSettings":{
"type":"AzureBlobStorageWriteSettings"
}
},
"enableStaging":false,
"dataIntegrationUnits":0
},
"inputs":[
{
"referenceName":"OneSourceFile",
"type":"DatasetReference",
"parameters":{
"Container":{
"value":"@pipeline().parameters.SourceStore_Location",
"type":"Expression"
},
"Directory":{
"value":"@pipeline().parameters.SourceStore_Directory",
"type":"Expression"
},
"filename":{
"value":"@item().name",
"type":"Expression"
}
}
}
],
"outputs":[
{
"referenceName":"OneDestinationFile",
"type":"DatasetReference",
"parameters":{
"Container":{
"value":"@pipeline().parameters.DestinationStore_Location",
"type":"Expression"
},
"Directory":{
"value":"@pipeline().parameters.DestinationStore_Directory",
"type":"Expression"
},
"filename":{
"value":"@item().name",
"type":"Expression"
}
}
}
]
},
{
"name":"DeleteAFile",
"type":"Delete",
"dependsOn":[
{
"activity":"CopyAFile",
"dependencyConditions":[
"Succeeded"
]
}
],
"policy":{
"timeout":"7.00:00:00",
"retry":0,
"retryIntervalInSeconds":30,
"secureOutput":false,
"secureInput":false
},
"userProperties":[
],
"typeProperties":{
"dataset":{
"referenceName":"OneSourceFile",
"type":"DatasetReference",
"parameters":{
"Container":{
"value":"@pipeline().parameters.SourceStore_Location",
"type":"Expression"
},
"Directory":{
"value":"@pipeline().parameters.SourceStore_Directory",
"type":"Expression"
},
"filename":{
"value":"@item().name",
"type":"Expression"
}
}
},
"logStorageSettings":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"path":"container/log"
},
"enableLogging":true,
"storeSettings":{
"type":"AzureBlobStorageReadSettings",
"recursive":true
}
}
}
]
}
}
],
"parameters":{
"SourceStore_Location":{
"type":"String"
},
"SourceStore_Directory":{
"type":"String"
},
"DestinationStore_Location":{
"type":"String"
},
"DestinationStore_Directory":{
"type":"String"
}
},
"annotations":[
]
}
}
Примеры наборов данных
Набор данных, используемый действием GetMetadata для перечисления списка файлов.
{
"name":"OneSourceFolder",
"properties":{
"linkedServiceName":{
"referenceName":"AzureStorageLinkedService",
"type":"LinkedServiceReference"
},
"parameters":{
"Container":{
"type":"String"
},
"Directory":{
"type":"String"
}
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"folderPath":{
"value":"@{dataset().Directory}",
"type":"Expression"
},
"container":{
"value":"@{dataset().Container}",
"type":"Expression"
}
}
}
}
}
Набор данных для источника данных, используемый действием копирования и действием Delete.
{
"name":"OneSourceFile",
"properties":{
"linkedServiceName":{
"referenceName":"AzureStorageLinkedService",
"type":"LinkedServiceReference"
},
"parameters":{
"Container":{
"type":"String"
},
"Directory":{
"type":"String"
},
"filename":{
"type":"string"
}
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":{
"value":"@dataset().filename",
"type":"Expression"
},
"folderPath":{
"value":"@{dataset().Directory}",
"type":"Expression"
},
"container":{
"value":"@{dataset().Container}",
"type":"Expression"
}
}
}
}
}
Набор данных для назначения данных, используемый действием копирования.
{
"name":"OneDestinationFile",
"properties":{
"linkedServiceName":{
"referenceName":"AzureStorageLinkedService",
"type":"LinkedServiceReference"
},
"parameters":{
"Container":{
"type":"String"
},
"Directory":{
"type":"String"
},
"filename":{
"type":"string"
}
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":{
"value":"@dataset().filename",
"type":"Expression"
},
"folderPath":{
"value":"@{dataset().Directory}",
"type":"Expression"
},
"container":{
"value":"@{dataset().Container}",
"type":"Expression"
}
}
}
}
}
Кроме того, шаблон для перемещения файлов можно найти здесь.
Известные ограничения
Действие удаления не поддерживает удаление списка папок, описанных подстановочным знаком.
При использовании фильтра по атрибутам modifiedDatetimeStart и modifiedDatetimeEnd для выбора файлов, которые нужно удалить, также установите в действии удаления "wildcardFileName": "*".
Связанный контент
Дополнительные сведения о перемещении файлов в конвейерах Фабрики данных Azure и Synapse.