Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Azure Data Factory
Azure Synapse Analytics
Tipp
Data Factory in Microsoft Fabric ist die nächste Generation von Azure Data Factory mit einer einfacheren Architektur, integrierter KI und neuen Features. Wenn Sie mit der Datenintegration noch nicht vertraut sind, beginnen Sie mit Fabric Data Factory. Vorhandene ADF-Workloads können auf Fabric aktualisiert werden, um auf neue Funktionen in der Datenwissenschaft, Echtzeitanalysen und Berichterstellung zuzugreifen.
Sie können die Löschaktivität in Azure Data Factory verwenden, um Dateien oder Ordner aus lokalen Speicherspeichern oder Cloudspeichern zu 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-kompatibler Speicher
- 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 der Leinwand die neue „Löschen“-Aktivität aus, falls sie noch nicht ausgewählt ist, und öffnen Sie die Registerkarte Quelle, um deren 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 |
|---|---|---|
| Datensatz | Stellt die Datasetreferenz zur Ermittlung der zu löschenden Dateien oder Ordner bereit. | Ja |
| rekursiv | Gibt an, ob die Dateien rekursiv aus den Unterordnern oder nur aus dem angegebenen Ordner gelöscht werden. | Nein. Der Standardwert lautet false. |
| maximale gleichzeitige Verbindungen | Die Anzahl der Verbindungen, die gleichzeitig hergestellt werden können, um Ordner oder Dateien auf einem Speichersystem zu löschen. | Nein. Der Standardwert lautet 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 |
| Protokollierungsspeichereinstellungen | Gilt nur, wenn 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. |
Nein |
| linkedServiceName | Gilt nur, wenn enablelogging = true. Der verknüpfte Dienst von Azure Storage, Azure Data Lake Storage Gen1 oder Azure Data Lake Storage Gen2, um die Protokolldatei zu speichern, die die Ordner- oder Dateinamen enthält, die von der Löschaktivität gelöscht wurden. Beachten Sie, dass sie mit demselben Typ von Integration Runtime konfiguriert werden muss, der von der Löschaktivität zum Löschen von Dateien verwendet wird. |
Nein |
| Pfad | Gilt nur, wenn enablelogging = true. Der Pfad zum Speichern der Protokolldatei in Ihrem Speicherkonto. Wenn Sie keinen Pfad angeben, erstellt der Dienst automatisch einen Container. |
Nein |
Ü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
- Aus 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 | Kategorie | Status | Fehler |
|---|---|---|---|
| test1/yyy.json | Datei | Gelöscht | |
| test2/hello789.txt | Datei | Gelöscht | |
| test2/test3/hello000.txt | Datei | Gelöscht | |
| test2/test3/zzz.json | Datei | Gelöscht |
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 | Dateiname | rekursiv | Output |
|---|---|---|---|
| Root/ Folder_A_2 | NULL | Falsch | 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 | Wahr | Root/ Folder_A_1/ 1.txt 2.txt 3.csv |
| Root/ Folder_A_2 | *.txt | Falsch | 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 | Wahr | 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.
Beispielpipeline
{
"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":[
]
}
}
Beispieldatensatz
{
"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.
Beispielpipeline
{
"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":[
]
}
}
Beispieldatensatz
{
"name":"BlobFilesLastModifiedBefore201811",
"properties":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":"*",
"folderPath":"mydirectory",
"container":"mycontainer"
}
}
}
}
Verschieben von Dateien durch Verketten des Kopiervorgangs und des Löschvorgangs.
Sie können eine Datei verschieben, indem Sie eine Kopieraktivität verwenden, um die Datei zu kopieren, und anschließend eine Löschaktivität, um sie in einer Pipeline zu löschen. Wenn Sie mehrere Dateien verschieben möchten, können Sie die GetMetadata-Aktivität + Filteraktivität + Foreach-Aktivität + Copy-Aktivität + Löschaktivität wie im folgenden Beispiel verwenden.
Hinweis
Wenn Sie den gesamten Ordner verschieben möchten, indem Sie ein Dataset definieren, das nur einen Ordnerpfad enthält, und dann eine Copy-Aktivität und eine Delete-Aktivität verwenden, um auf dasselbe Dataset zu verweisen, das einen Ordner darstellt, müssen Sie sehr vorsichtig sein. 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.
Beispielpipeline
{
"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":[
]
}
}
Beispieldatensätze
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"
}
}
}
}
}
Datensatz für die von der Copy-Aktivität und der Delete-Aktivität verwendete 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"
}
}
}
}
}
Zum Verschieben von Dateien erhalten Sie die Vorlage 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 um die zu löschenden Dateien auszuwählen, sicher, dass der folgende Parameter 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.