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, um Dateien zu sauber oder zu archivieren, wenn sie 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 dateien, die gleichzeitig geschrieben werden, nicht löschen.
Wenn Sie Dateien oder Ordner aus einem lokalen System löschen möchten, stellen Sie sicher, dass Sie eine selbst gehostete Integrationslaufzeit mit einer Version von mehr als 3.14 verwenden.
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 die neue Löschaktivität auf dem Zeichenbereich aus, wenn sie noch nicht ausgewählt ist, und deren Registerkarte "Quelle ", 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 den gelöschten Ordner oder dateinamen 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, die angegeben werden können, an der Sie die Protokolldatei speichern möchten, die den Ordner oder Dateinamen enthält, die von der Löschaktivität gelöscht wurden. |
Nein |
linkedServiceName | Gilt nur bei folgender Angabe: enablelogging = true. Der verknüpfte Dienst von Azure Storage, Azure Data Lake Storage Gen1 oder Azure Data Lake Storage Gen2 zum Speichern der Protokolldatei, die den Ordner oder Dateinamen enthält, die von der Löschaktivität gelöscht wurden. 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 einen Container für Sie. |
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
- 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
Jetzt verwenden Sie die Löschaktivität zum Löschen von Ordnern oder Dateien durch die Kombination verschiedener Eigenschaftswerte aus dem Dataset und der Löschaktivität:
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 die Dienstsystemvariable aus dem Zeitplantrigger verwenden, um zu ermitteln, welcher Ordner oder welche Dateien in jeder Pipelineausführung 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 zu sauber, indem Sie den Dateiattributefilter "LastModified" im Dataset verwenden.
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 Löschaktivität unterstützt das Löschen von Ordnern, die durch "Wild" beschrieben werden Karte nicht.
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.