Condividi tramite


Attività di eliminazione in Azure Data Factory e Azure Synapse Analytics

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi all-in-one per le aziende. Microsoft Fabric copre tutto, dallo spostamento dati al data science, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Vedere le informazioni su come iniziare una nuova prova gratuita!

È possibile usare l'attività di eliminazione in Azure Data Factory per eliminare file o cartelle dagli archivi di archiviazione locali o dagli archivi di archiviazione cloud. Usare questa attività per pulire o archiviare i file quando non sono più necessari.

Avviso

I file o le cartelle eliminati non possono essere ripristinati (a meno che la risorsa di archiviazione non abbia abilitato l'eliminazione temporanea). Prestare attenzione quando si usa l'attività Delete per eliminare file o cartelle.

Procedure consigliate

Ecco alcuni consigli per l'uso dell'attività Delete:

  • Eseguire il backup dei file prima di eliminarli con l'attività Delete nel caso in cui sia necessario ripristinarli in un secondo momento.

  • Assicurarsi che il servizio disponga delle autorizzazioni di scrittura per eliminare cartelle o file dall'archivio di archiviazione.

  • Assicurarsi di non eliminare i file che vengono scritti contemporaneamente.

  • Per eliminare file o cartelle da un sistema locale, assicurarsi di usare un runtime di integrazione self-hosted con una versione successiva alla 3.14.

Archivi dati supportati

Creare un'attività Delete con l'interfaccia utente

Per usare un'attività Delete in una pipeline, completare la procedura seguente:

  1. Cercare Elimina nel riquadro Attività pipeline e trascinare un'attività Delete nell'area di disegno della pipeline.

  2. Selezionare la nuova attività Elimina nell'area di disegno se non è già selezionata e la relativa scheda Origine per modificarne i dettagli.

    Mostra l'interfaccia utente per un'attività Delete.

  3. Selezionare un set di dati esistente o crearne uno nuovo specificando i file da eliminare. Se sono selezionati più file, abilitare facoltativamente l'eliminazione ricorsiva, che elimina anche i dati in qualsiasi cartella figlio. È anche possibile specificare un numero massimo di connessioni simultanee per l'operazione.

  4. Facoltativamente, configurare la registrazione selezionando la scheda Impostazioni di registrazione e selezionando un percorso esistente o creando un nuovo percorso del servizio collegato dell'account di registrazione per registrare i risultati delle operazioni di eliminazione eseguite.

    Mostra il   Impostazioni di registrazione  scheda per un'attività Delete.

Sintassi

{
    "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>"
        }
    }
}

Proprietà del tipo

Proprietà Descrizione Richiesto
set di dati Fornisce il riferimento al set di dati per determinare quali file o cartelle eliminare
recursive Indica se i file devono essere eliminati in modo ricorsivo dalle sottocartelle o solo dalla cartella specificata. No. Il valore predefinito è false.
maxConcurrentConnections Numero di connessioni cui connettere l'archivio simultaneamente per eliminare la cartella o i file. No. Il valore predefinito è 1.
abilitare la registrazione Indica se è necessario registrare i nomi di file o cartelle eliminati. Se è true, è necessario fornire un account di archiviazione per salvare il file di log, in modo da poter monitorare i comportamenti dell'attività Delete leggendo il file di log. No
logStorageSettings Applicabile solo quando enablelogging = true.

Gruppo di proprietà di archiviazione che è possibile specificare in cui si desidera salvare il file di log contenente i nomi di cartella o file eliminati dall'attività Delete.
No
linkedServiceName Applicabile solo quando enablelogging = true.

Il servizio collegato di Archiviazione di Azure, Azure Data Lake Storage Gen1 o Azure Data Lake Storage Gen2 per archiviare il file di log contenente i nomi di cartella o file eliminati dall'attività Elimina. Tenere presente che deve essere configurato con lo stesso tipo di Runtime di integrazione da quello usato dall'attività di eliminazione per eliminare i file.
No
path Applicabile solo quando enablelogging = true.

Percorso in cui salvare il file di log nell'account di archiviazione. Se non si specifica un percorso, il servizio crea automaticamente un contenitore.
No

Monitoraggio

È possibile monitorare i risultati dell'attività Delete in due posizioni diverse:

  • Dall'output dell'attività Delete.
  • Dal file di log.

Output di esempio dell'attività 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
}

File di log di esempio dell'attività Delete

Nome Categoria Status Error
test1/yyy.json file Eliminati
test2/hello789.txt file Eliminati
test2/test3/hello000.txt file Eliminati
test2/test3/zzz.json file Eliminati

Esempi dell'uso dell'attività Delete

Eliminare cartelle o file specifici

L'archivio ha la struttura di cartelle seguente:

Root/
    Cartella_A_1/
        1.txt
        2.txt
        3.csv
    Cartella_A_2/
        4.txt
        5.csv
        Cartella_B_1/
            6.txt
            7.csv
        Cartella_B_2/
            8.txt

A questo momento si usa l'attività Elimina per eliminare cartelle o file tramite la combinazione di valori di proprietà diversi dal set di dati e dall'attività Delete:

folderPath fileName recursive Output
Root/Cartella_A_2 NULL Falso Root/
    Cartella_A_1/
        1.txt
        2.txt
        3.csv
    Cartella_A_2/
        4.txt
        5.csv
        Cartella_B_1/
            6.txt
            7.csv
        Cartella_B_2/
            8.txt
Root/Cartella_A_2 NULL Vero Root/
    Cartella_A_1/
        1.txt
        2.txt
        3.csv
    Cartella_A_2/
        4.txt
        5.csv
        Cartella_B_1/
            6.txt
            7.csv
        Cartella_B_2/
            8.txt
Root/Cartella_A_2 *.txt Falso Root/
    Cartella_A_1/
        1.txt
        2.txt
        3.csv
    Cartella_A_2/
        4.txt
        5.csv
        Cartella_B_1/
            6.txt
            7.csv
        Cartella_B_2/
            8.txt
Root/Cartella_A_2 *.txt Vero Root/
    Cartella_A_1/
        1.txt
        2.txt
        3.csv
    Cartella_A_2/
        4.txt
        5.csv
        Cartella_B_1/
            6.txt
            7.csv
        Cartella_B_2/
            8.txt

Pulire periodicamente le cartelle o i file partizionati in base al tempo

È possibile creare una pipeline per pulire periodicamente le cartelle o i file partizionati in base al tempo. Ad esempio, la struttura di cartelle sarà simile a: /mycontainer/2018/12/14/*.csv. È possibile usare la variabile di sistema del servizio dal trigger di pianificazione per identificare la cartella o i file da eliminare in ogni esecuzione della pipeline.

Pipeline di esempio

{
    "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":[

        ]
    }
}

Set di dati di esempio

{
    "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"
                }
            }
        }
    }
}

Trigger di esempio

{
    "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
                    ]
                }
            }
        }
    }
}

Pulire i file scaduti modificati per l'ultima volta prima della versione 2018.1.1

È possibile creare una pipeline per pulire i file obsoleti o scaduti usando il filtro dell'attributo file: "LastModified" nel set di dati.

Pipeline di esempio

{
    "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":[

        ]
    }
}

Set di dati di esempio

{
    "name":"BlobFilesLastModifiedBefore201811",
    "properties":{
        "linkedServiceName":{
            "referenceName":"BloblinkedService",
            "type":"LinkedServiceReference"
        },
        "annotations":[

        ],
        "type":"Binary",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "fileName":"*",
                "folderPath":"mydirectory",
                "container":"mycontainer"
            }
        }
    }
}

Spostare file mediante il concatenamento dell'attività Copy e dell'attività Delete

È possibile spostare un file usando un attività Copy per copiare un file e quindi un'attività Delete per eliminare un file in una pipeline. Quando si desidera spostare più file, è possibile usare l'attività GetMetadata + attività Filter + Attività Foreach + attività Copy + Elimina attività come nell'esempio seguente.

Nota

Se si vuole spostare l'intera cartella definendo un set di dati contenente solo un percorso di cartella e quindi usando un attività Copy e un'attività Delete per fare riferimento allo stesso set di dati che rappresenta una cartella, è necessario prestare molta attenzione. È necessario assicurarsi che non siano presenti nuovi file che arrivano nella cartella tra l'operazione di copia e l'operazione di eliminazione. Se i nuovi file arrivano nella cartella al momento in cui l'attività di copia ha appena completato il processo di copia, ma l'attività Elimina non è stata avviata, l'attività Elimina potrebbe eliminare il file appena in arrivo che non è ancora stato copiato nella destinazione eliminando l'intera cartella.

Pipeline di esempio

{
    "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":[

        ]
    }
}

Set di dati di esempio

Set di dati usato dall'attività GetMetadata per enumerare l'elenco dei file.

{
    "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"
                }
            }
        }
    }
}

Set di dati per l'origine dati usata dall'attività Copy e dall'attività 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"
                }
            }
        }
    }
}

Set di dati per la destinazione dei dati usata dall'attività Copy.

{
    "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"
                }
            }
        }
    }
}

È anche possibile ottenere il modello per spostare i file da qui.

Limitazioni note

  • L'attività Di eliminazione non supporta l'eliminazione di un elenco di cartelle descritte dal carattere jolly.

  • Quando si usa il filtro dell'attributo file nell'attività di eliminazione: modifiedDatetimeStart e modifiedDatetimeEnd per selezionare i file da eliminare, assicurarsi di impostare anche "wildcardFileName": "*" nell'attività di eliminazione.

Altre informazioni sullo spostamento di file nelle pipeline di Azure Data Factory e Synapse.