Freigeben über


Aktivitäten in Azure Data Factory and Azure Synapse Analytics löschen

GILT FÜR: Azure Data Factory Azure Synapse Analytics

Tipp

Testen Sie Data Factory in Microsoft Fabric, eine All-in-One-Analyselösung für Unternehmen. Microsoft Fabric deckt alle Aufgaben ab, von der Datenverschiebung bis hin zu Data Science, Echtzeitanalysen, Business Intelligence und Berichterstellung. Erfahren Sie, wie Sie kostenlos eine neue Testversion starten!

Sie können mit der Delete-Aktivität in Azure Data Factory Dateien oder Ordner aus lokalen Speichern oder Cloudspeichern löschen. Verwenden Sie diese Aktivität zum Bereinigen oder Archivieren von Dateien, wenn diese nicht mehr benötigt werden.

Warnung

Gelöschte Dateien oder Ordner können nicht wiederhergestellt werden (es sei denn, für den Speicher ist vorläufiges Löschen aktiviert). Gehen Sie mit Bedacht vor, wenn Sie Dateien oder Ordner mit der Delete-Aktivität löschen.

Bewährte Methoden

Nachfolgend sind einige Empfehlungen für die Verwendung der Delete-Aktivität aufgeführt:

  • Sichern Sie Ihre Dateien, bevor Sie sie mit der Delete-Aktivität löschen, falls Sie die Dateien später wiederherstellen müssen.

  • Stellen Sie sicher, dass der Dienst über Schreibberechtigungen verfügt, um Ordner oder Dateien aus dem Speicher zu löschen.

  • Stellen Sie sicher, dass Sie keine Dateien löschen, die gleichzeitig geschrieben werden.

  • Verwenden Sie beim Löschen von Dateien oder Ordnern aus einem lokalen System unbedingt eine selbstgehostete Integration Runtime mit einer Version höher als 3.14.

Unterstützte Datenspeicher

Erstellen einer „Löschen“-Aktivität mithilfe der Benutzeroberfläche

Führen Sie die folgenden Schritte aus, um eine „Löschen“-Aktivität in einer Pipeline zu verwenden:

  1. Suchen Sie im Bereich „Aktivitäten“ der Pipeline nach Löschen, und ziehen Sie eine „Löschen“-Aktivität in die Pipelinecanvas.

  2. Wählen Sie auf dem Canvas die neue Aktivität „Löschen“ aus (wenn sie noch nicht ausgewählt wurde), und wählen Sie anschließend die Registerkarte Quelle aus, um die Details zu bearbeiten.

    Benutzeroberfläche für eine „Löschen“-Aktivität

  3. Wählen Sie ein bestehendes Dataset aus, oder erstellen Sie ein Neues, in dem die zu löschenden Dateien angegeben sind. Wenn mehrere Dateien ausgewählt sind, können Sie optional das rekursive Löschen aktivieren, wodurch auch Daten in allen untergeordneten Ordnern gelöscht werden. Sie können auch eine maximale Anzahl gleichzeitiger Verbindungen für den Vorgang angeben.

  4. Optional können Sie die Protokollierung konfigurieren, indem Sie die Registerkarte Protokollierungseinstellungen auswählen und ein verknüpften Dienstspeicherort für das Protokollierungskonto auswählen oder neu erstellen, um die Ergebnisse der ausgeführten „Löschen“-Vorgänge zu protokollieren.

    Zeigt die Registerkarte „Protokollierungseinstellungen“ für eine Aktivität „Löschen“.

Syntax

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

Typeigenschaften

Eigenschaft Beschreibung Erforderlich
dataset Stellt die Datasetreferenz zur Ermittlung der zu löschenden Dateien oder Ordner bereit. Ja
recursive Gibt an, ob die Dateien rekursiv aus den Unterordnern oder nur aus dem angegebenen Ordner gelöscht werden. Nein. Der Standardwert lautet false.
maxConcurrentConnections Die Anzahl von Verbindungen, die gleichzeitig zum Löschen von Ordnern oder Dateien mit einem Speicher hergestellt werden können Nein. Der Standardwert ist 1.
Protokollierung aktivieren Gibt an, ob Sie die Namen der gelöschten Ordner oder Dateien aufzeichnen müssen. Bei „true“ müssen Sie zusätzlich ein Speicherkonto zum Speichern der Protokolldatei angeben, damit Sie anhand der Protokolldatei das Verhalten der Delete-Aktivität nachverfolgen können. Nein
logStorageSettings Gilt nur bei folgender Angabe: enablelogging = true.

Eine Gruppe von Speichereigenschaften, mit denen Sie angeben können, wo die Protokolldatei mit den Namen der Ordner oder Dateien gespeichert werden soll, die mit der Aktivität „Löschen“ gelöscht wurden.
No
linkedServiceName Gilt nur bei folgender Angabe: enablelogging = true.

Der verknüpfte Dienst von Azure Storage, Azure Data Lake Store Gen1 oder Azure Data Lake Storage Gen2 zum Speichern der Protokolldatei, die die Namen der durch die Aktivität „Löschen“ gelöschten Ordner oder Dateien enthält. Beachten Sie, dass bei der Konfiguration die gleiche Art von Integration Runtime verwendet werden muss wie bei der Delete-Aktivität für die Dateilöschung.
Nein
path Gilt nur bei folgender Angabe: enablelogging = true.

Der Pfad zum Speichern der Protokolldatei in Ihrem Speicherkonto. Wenn Sie keinen Pfad angeben, erstellt der Dienst automatisch einen Container.
No

Überwachung

Es gibt zwei Stellen, an denen Sie die Ergebnisse der Delete-Aktivität anzeigen und überwachen können:

  • In der Ausgabe der Delete-Aktivität
  • In der Protokolldatei

Beispielausgabe der Delete-Aktivität

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

Beispielprotokolldatei der Delete-Aktivität

Name Category Status Fehler
test1/yyy.json Datei Deleted
test2/hello789.txt Datei Deleted
test2/test3/hello000.txt Datei Deleted
test2/test3/zzz.json Datei Deleted

Beispiele zur Verwendung der Delete-Aktivität

Löschen bestimmter Ordner oder Dateien

Der Speicher hat die folgenden Ordnerstruktur:

Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Ordner_A_2/
        4.txt
        5.csv
        Ordner_B_1/
            6.txt
            7.csv
        Ordner_B_2/
            8.txt

Nun verwenden Sie die Aktivität „Löschen“, um Ordner oder Dateien durch die Kombination verschiedener Eigenschaftswerte aus dem Dataset und der Aktivität „Löschen“ zu löschen:

folderPath fileName recursive Output
Root/ Folder_A_2 NULL False Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Ordner_A_2/
        4.txt
        5.csv
        Ordner_B_1/
            6.txt
            7.csv
        Ordner_B_2/
            8.txt
Root/ Folder_A_2 NULL True Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Ordner_A_2/
        4.txt
        5.csv
        Ordner_B_1/
            6.txt
            7.csv
        Ordner_B_2/
            8.txt
Root/ Folder_A_2 *.txt False Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Ordner_A_2/
        4.txt
        5.csv
        Ordner_B_1/
            6.txt
            7.csv
        Ordner_B_2/
            8.txt
Root/ Folder_A_2 *.txt True Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Ordner_A_2/
        4.txt
        5.csv
        Ordner_B_1/
            6.txt
            7.csv
        Ordner_B_2/
            8.txt

Regelmäßiges Bereinigen der zeitpartitionierten Ordner oder Dateien

Sie können eine Pipeline erstellen, um die zeitpartitionierten Ordner oder Dateien in regelmäßigen Abständen zu bereinigen. Die Ordnerstruktur sieht zum Beispiel wie folgt aus: /mycontainer/2018/12/14/*.csv. Sie können mithilfe der Dienstsystemvariablen aus dem Zeitplanauslöser bestimmen, welche Ordner oder Dateien in den einzelnen Pipelineausführungen gelöscht werden sollen.

Beispiel-Pipeline

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

        ]
    }
}

Beispieldataset

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

Beispielauslöser

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

Bereinigen der abgelaufenen Dateien, die zuletzt vor dem 1. Januar 2018 geändert wurden

Sie können eine Pipeline erstellen, um die alten oder abgelaufenen Dateien mithilfe des Dateiattributfilters „LastModified“ im Dataset zu bereinigen.

Beispiel-Pipeline

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

        ]
    }
}

Beispieldataset

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

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

Verschieben von Dateien durch Verkettung der Copy-Aktivität und der Delete-Aktivität

Sie können eine Datei verschieben. Nutzen Sie dazu die Kopieren-Funktion zum Kopieren einer Datei und anschließend die Löschen-Funktion zum Löschen einer Datei in einer Pipeline. Wenn Sie mehrere Dateien verschieben möchten, können Sie wie im Beispiel weiter unten die folgenden Funktionen verwenden: GetMetadata-Funktion, Filter-Funktion, ForEach-Funktion, Kopieren-Funktion und Löschen-Funktion:

Hinweis

Lassen Sie Vorsicht walten, wenn Sie den gesamten Ordner verschieben möchten, indem Sie einen Datensatz auf nur einem Ordnerpfad festlegen und anschließend eine Kopieren- und Löschen-Funktion anwenden, um auf den gleichen Datensatz zu verweisen, das einen Ordner darstellt. Sie müssen sicherstellen, dass zwischen dem Kopiervorgang und dem Löschvorgang keine neuen Dateien im Ordner eintreffen. Wenn neue Dateien zu dem Zeitpunkt im Ordner platziert werden, zu dem der Kopiervorgang gerade abgeschlossen wurde, der Löschvorgang jedoch noch nicht gestartet wurde, können diese neuen Dateien, die noch NICHT ins Ziel kopiert wurden, unter Umständen beim Löschvorgang durch Löschung des gesamten Ordners gelöscht werden.

Beispiel-Pipeline

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

        ]
    }
}

Beispieldatasets

Von der GetMetadata-Aktivität verwendetes Dataset zum Enumerieren der Dateiliste:

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

Von der Copy-Aktivität und der Delete-Aktivität verwendetes Dataset für die Datenquelle:

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

Von der Copy-Aktivität verwendetes Dataset für das Datenziel:

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

Sie erhalten die Vorlage zum Verschieben von Dateien auch hier.

Bekannte Einschränkungen

  • Die Aktivität „Löschen“ unterstützt nicht das Löschen einer Liste mit Ordnern, die durch Platzhalterzeichen beschrieben werden.

  • Stellen Sie bei Verwendung des Dateiattributfilters in der Löschaktivität modifiedDatetimeStart und modifiedDatetimeEnd zum Auswählen von zu löschenden Dateien sicher, dass folgende Zeichenfolge auch in der Löschaktivität festgelegt ist: "wildcardFileName": "*"

Erfahren Sie mehr über das Verschieben von Dateien in Azure Data Factory und Synapse-Pipelines.