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 completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

È 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.

    Shows the UI for a Delete activity.

  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.

    Shows the  Logging settings  tab for a Delete activity.

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 Archiviazione Gen1 o Azure Data Lake Archiviazione Gen2 per archiviare il file di log contenente i nomi di cartella o file eliminati dall'attività Delete. 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 Stato 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.