Actividad Eliminar de Azure Data Factory y Azure Synapse Analytics
SE APLICA A:Azure Data Factory Azure Synapse Analytics
Sugerencia
Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. ¡Obtenga más información sobre cómo iniciar una nueva evaluación gratuita!
Puede usar la actividad de eliminación en Azure Data Factory para eliminar archivos o carpetas de almacenes locales o almacenes en la nube. Use esta actividad para limpiar o archivar archivos cuando ya no sean necesarios.
Advertencia
Los archivos o carpetas eliminados no se pueden restaurar (a menos que el almacenamiento tenga habilitada la función de eliminación temporal). Tenga cuidado al usar la actividad de eliminación para eliminar archivos o carpetas.
Procedimientos recomendados
Estas son algunas recomendaciones para usar la actividad de eliminación:
Realice una copia de seguridad de los archivos antes de eliminarlos con la actividad de eliminación por si tuviera que restaurarlos en el futuro.
Asegúrese de que el servicio tiene permisos de escritura para eliminar archivos o carpetas del almacén de almacenamiento.
Asegúrese de que no está eliminando los archivos que se escriben al mismo tiempo.
Si desea eliminar archivos o carpetas de un sistema local, asegúrese de que usa un entorno de ejecución de integración autohospedado con una versión superior a la 3.14.
Almacenes de datos compatibles
- Almacenamiento de blobs de Azure
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Archivos de Azure
- Sistema de archivos
- FTP
- SFTP
- Microsoft Fabric Lakehouse
- Amazon S3
- Almacenamiento compatible con Amazon S3
- Google Cloud Storage
- Oracle Cloud Storage
- HDFS
Creación de una actividad Delete (eliminar) con la UI
Para usar una actividad Delete en una canalización, complete los pasos siguientes:
Busque Delete en el panel Actividades de canalización y arrastre una actividad Delete al lienzo de canalización.
Seleccione la nueva actividad Eliminar en el lienzo si aún no está seleccionada y su pestaña Origen para editar sus detalles.
Seleccione un conjunto de datos existente o cree uno que especifique los archivos que se eliminarán. Si se seleccionan varios archivos, puede habilitar la eliminación recursiva, lo que también elimina los datos de las carpetas secundarias. También puede especificar un número máximo de conexiones simultáneas para la operación.
Opcionalmente, puede configurar el registro seleccionando la pestaña Configuración de registro y seleccionando una ubicación de servicio vinculada existente o creando una nueva cuenta de registro para registrar los resultados de las operaciones de eliminación realizadas.
Sintaxis
{
"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>"
}
}
}
Propiedades de tipo
Propiedad | Descripción | Obligatorio |
---|---|---|
dataset | Proporciona la referencia del conjunto de datos para determinar qué archivos o carpetas se van a eliminar. | Sí |
recursive | Indica si los archivos se eliminan de forma recursiva de las subcarpetas o solo de la carpeta especificada. | No. El valor predeterminado es false . |
maxConcurrentConnections | El número de conexiones para conectarse al almacén de almacenamiento al mismo tiempo para eliminar archivos o carpetas. | No. El valor predeterminado es 1 . |
habilitar registro | Indica si necesita registrar los nombres de archivo o carpeta eliminados. Si es true, tiene que proporcionar una cuenta de almacenamiento para guardar el archivo de registro, por lo que puede realizar un seguimiento de los comportamientos de la actividad de eliminación leyendo el archivo de registro. | No |
logStorageSettings | Solo se aplica cuando enablelogging = true. Un grupo de propiedades de almacenamiento que se pueden especificar donde desea guardar el archivo de registro que contiene los nombres de carpeta o archivo eliminados por la actividad Eliminar. |
No |
linkedServiceName | Solo se aplica cuando enablelogging = true. El servicio vinculado de Azure Storage, Azure Data Lake Storage Gen1 o Azure Data Lake Storage Gen2 para almacenar el archivo de registro que contiene la carpeta o los nombres de archivo eliminados por la actividad Delete. Tenga en cuenta que se debe configurar con el mismo tipo de Integration Runtime que el que la actividad de eliminación usó para eliminar archivos. |
No |
path | Solo se aplica cuando enablelogging = true. La ruta de acceso para guardar el archivo de registro en la cuenta de almacenamiento. Si no proporciona una ruta de acceso, el servicio crea un contenedor automáticamente. |
No |
Supervisión
Hay dos lugares donde puede ver y supervisar los resultados de la actividad de eliminación:
- En la salida de la actividad de eliminación.
- En el archivo de registro.
Salida de ejemplo de la actividad de eliminación
{
"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
}
Archivo de registro de ejemplo de la actividad de eliminación
Nombre | Category | Status | Error |
---|---|---|---|
test1/yyy.json | Archivo | Deleted | |
test2/hello789.txt | Archivo | Deleted | |
test2/test3/hello000.txt | Archivo | Deleted | |
test2/test3/zzz.json | Archivo | Deleted |
Ejemplos de uso de la actividad de eliminación
Eliminación de carpetas o archivos específicos
El almacén tiene la estructura de carpetas siguiente:
Root/ (Raíz):
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
Ahora usa la actividad Delete para eliminar carpetas o archivos mediante la combinación de un valor de propiedad diferente del conjunto de datos y la actividad Delete:
folderPath | fileName | recursive | Output |
---|---|---|---|
Root (Raíz)/ Folder_A_2 | NULL | False | Root/ (Raíz): 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 (Raíz)/ Folder_A_2 | NULL | True | Root/ (Raíz): Folder_A_1/ 1.txt 2.txt 3.csv |
Root (Raíz)/ Folder_A_2 | *.txt | False | Root/ (Raíz): 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 (Raíz)/ Folder_A_2 | *.txt | True | Root/ (Raíz): Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 7.csv Folder_B_2/ |
Limpieza periódica de la carpeta o los archivos de particiones por hora
Puede crear una canalización para limpiar periódicamente la carpeta o los archivos de particiones por hora. Por ejemplo, la estructura de carpetas es similar a: /mycontainer/2018/12/14/*.csv
. Puede usar la variable del sistema de servicio del desencadenador schedule para identificar qué carpeta o archivos se deben eliminar en cada ejecución de canalización.
Canalización de ejemplo
{
"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":[
]
}
}
Conjunto de datos de ejemplo
{
"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"
}
}
}
}
}
Desencadenador de ejemplo
{
"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
]
}
}
}
}
}
Limpie los archivos expirados que se modificaron por última vez antes del 1 de enero de 2018.
Puede crear una canalización para limpiar los archivos antiguos o expirados mediante el filtro de atributos de archivo: "LastModified" en el conjunto de datos.
Canalización de ejemplo
{
"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":[
]
}
}
Conjunto de datos de ejemplo
{
"name":"BlobFilesLastModifiedBefore201811",
"properties":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":"*",
"folderPath":"mydirectory",
"container":"mycontainer"
}
}
}
}
Movimiento de archivos encadenando la actividad de copia y la actividad de eliminación
Puede mover un archivo mediante una actividad de copia para copiar un archivo y, a continuación, una actividad de eliminación para eliminar un archivo en una canalización. Si quiere mover varios archivos, puede usar la actividad GetMetadata + actividad de filtro + actividad Foreach + actividad de copia + actividad de eliminación como en el ejemplo siguiente.
Nota
Si quiere mover toda la carpeta definiendo un conjunto de datos que contiene solo una ruta de carpeta y, a continuación, usando una actividad de copia y una actividad de eliminación para hacer referencia al mismo conjunto de datos que representa una carpeta, deberá tener mucho cuidado. Debe asegurarse de que no llegue ningún archivo nuevo a la carpeta entre la operación de copia y la operación de eliminación. Si llegan archivos nuevos a la carpeta en el momento en que la actividad de copia acaba de completar el trabajo de copia pero la actividad de eliminación aún no ha empezado, es posible que la actividad de eliminación elimine este nuevo archivo entrante que NO se ha copiado aún en el destino mediante la eliminación de toda la carpeta.
Canalización de ejemplo
{
"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":[
]
}
}
Conjuntos de datos de ejemplo
Conjunto de datos utilizado por la actividad GetMetadata para enumerar la lista de archivos.
{
"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"
}
}
}
}
}
Conjunto de datos para origen de datos utilizado por la actividad de copia y la actividad de eliminación.
{
"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"
}
}
}
}
}
Conjunto de datos de destino de datos utilizado por la actividad de copia.
{
"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"
}
}
}
}
}
También puede obtener la plantilla para mover archivos aquí.
Limitaciones conocidas
La actividad de eliminación no admite la eliminación de la lista de carpetas descritas por caracteres comodín.
Al usar el filtro de atributo de archivo en modifiedDatetimeStart y modifiedDatetimeEnd de la actividad de eliminación para seleccionar los archivos que se van a eliminar, asegúrese de establecer "wildcardFileName": "*" también en la actividad de eliminación también.
Contenido relacionado
Aprenda a mover archivos en canalizaciones de Azure Data Factory y Synapse.