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
- Azure Blob Storage
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Azure Files
- Dateisystem
- FTP
- SFTP
- Microsoft Fabric Lakehouse
- Amazon S3
- Amazon S3 Compatible Storage
- Google Cloud Storage
- Oracle Cloud Storage
- HDFS
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:
Suchen Sie im Bereich „Aktivitäten“ der Pipeline nach Löschen, und ziehen Sie eine „Löschen“-Aktivität in die Pipelinecanvas.
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.
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.
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.
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/ 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 |
Root/ Folder_A_2 | *.txt | False | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Ordner_A_2/ 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/ 5.csv Ordner_B_1/ 7.csv Ordner_B_2/ |
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": "*"
Zugehöriger Inhalt
Erfahren Sie mehr über das Verschieben von Dateien in Azure Data Factory und Synapse-Pipelines.