Ta bort aktivitet i Azure Data Factory och Azure Synapse Analytics
GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics
Dricks
Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!
Du kan använda borttagningsaktiviteten i Azure Data Factory för att ta bort filer eller mappar från lokala lagringslager eller molnlagringslager. Använd den här aktiviteten för att rensa eller arkivera filer när de inte längre behövs.
Varning
Borttagna filer eller mappar kan inte återställas (såvida inte lagringen har mjuk borttagning aktiverat). Var försiktig när du använder aktiviteten Ta bort till att ta bort filer och mappar.
Bästa praxis
Här följer några rekommendationer för att använda borttagningsaktiviteten:
Säkerhetskopiera dina filer innan du tar bort dem med borttagningsaktiviteten om du behöver återställa dem i framtiden.
Kontrollera att tjänsten har skrivbehörighet för att ta bort mappar eller filer från lagringsarkivet.
Se till att du inte tar bort filer som skrivs samtidigt.
Om du vill ta bort filer eller mappar från ett lokalt system kontrollerar du att du använder en lokalt installerad integrationskörning med en version som är större än 3.14.
Datalager som stöds
- Azure Blob Storage
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Azure Files
- Filsystem
- FTP
- SFTP
- Microsoft Fabric Lakehouse
- Amazon S3
- Amazon S3-kompatibel lagring
- Google Cloud Storage
- Oracle Cloud Storage
- HDFS
Skapa en borttagningsaktivitet med användargränssnittet
Utför följande steg för att använda en borttagningsaktivitet i en pipeline:
Sök efter Ta bort i fönstret Pipelineaktiviteter och dra en borttagningsaktivitet till pipelinearbetsytan.
Välj den nya borttagningsaktiviteten på arbetsytan om den inte redan är markerad och fliken Källa för att redigera dess information.
Välj en befintlig eller skapa en ny datauppsättning som anger vilka filer som ska tas bort. Om du väljer flera filer kan du också aktivera rekursiv borttagning, vilket även tar bort data i underordnade mappar. Du kan också ange ett maximalt antal samtidiga anslutningar för åtgärden.
Du kan också konfigurera loggning genom att välja fliken Loggningsinställningar och välja en befintlig eller skapa en ny länkad tjänstplats för loggningskontot för att logga resultatet av de borttagna åtgärder som utförts.
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>"
}
}
}
Typegenskaper
Property | Beskrivning | Obligatoriskt |
---|---|---|
datauppsättning | Innehåller datamängdsreferensen för att avgöra vilka filer eller mappar som ska tas bort | Ja |
rekursiv | Anger om filerna tas bort rekursivt från undermapparna eller endast från den angivna mappen. | Nej. Standardvärdet är false . |
maxConcurrentConnections | Antalet anslutningar som ska anslutas till lagringsarkivet samtidigt för att ta bort mapp eller filer. | Nej. Standardvärdet är 1 . |
aktivera loggning | Anger om du behöver registrera den borttagna mappen eller filnamnen. Om det är sant måste du ytterligare ange ett lagringskonto för att spara loggfilen så att du kan spåra beteendet för borttagningsaktiviteten genom att läsa loggfilen. | Nej |
logStorageSettings | Gäller endast när aktivering = true. En grupp med lagringsegenskaper som kan anges där du vill spara loggfilen som innehåller mappen eller filnamnen som tagits bort av aktiviteten Ta bort. |
Nej |
linkedServiceName | Gäller endast när aktivering = true. Den länkade tjänsten för Azure Storage, Azure Data Lake Storage Gen1 eller Azure Data Lake Storage Gen2 för att lagra loggfilen som innehåller mappen eller filnamnen som tagits bort av borttagningsaktiviteten. Tänk på att den måste konfigureras med samma typ av integrationskörning från den som används av borttagningsaktiviteten för att ta bort filer. |
Nej |
path | Gäller endast när aktivering = true. Sökvägen för att spara loggfilen i ditt lagringskonto. Om du inte anger någon sökväg skapar tjänsten en container åt dig. |
Nej |
Övervakning
Det finns två platser där du kan se och övervaka resultatet av borttagningsaktiviteten:
- Från utdata från aktiviteten Ta bort.
- Från loggfilen.
Exempel på utdata från borttagningsaktiviteten
{
"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
}
Exempelloggfil för borttagningsaktiviteten
Name | Kategori | Status | Fel |
---|---|---|---|
test1/yyy.json | Fil | Borttagen | |
test2/hello789.txt | Fil | Borttagen | |
test2/test3/hello000.txt | Fil | Borttagen | |
test2/test3/zzz.json | Fil | Borttagen |
Exempel på hur du använder borttagningsaktiviteten
Ta bort specifika mappar eller filer
Arkivet har följande mappstruktur:
Rot/
Folder_A_1/
1.txt
2.txt
3.csv
Folder_A_2/
4.txt
5.csv
Folder_B_1/
6.txt
7.csv
Folder_B_2/
8.txt
Nu använder du aktiviteten Ta bort för att ta bort mappar eller filer genom att kombinera olika egenskapsvärden från datauppsättningen och borttagningsaktiviteten:
folderPath | fileName | rekursiv | Output |
---|---|---|---|
Rot/Folder_A_2 | NULL | Falsk | Rot/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Rot/Folder_A_2 | NULL | Sant | Rot/ Folder_A_1/ 1.txt 2.txt 3.csv |
Rot/Folder_A_2 | *.Txt | Falsk | Rot/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Rot/Folder_A_2 | *.Txt | Sant | Rot/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 7.csv Folder_B_2/ |
Rensa regelbundet den tidspartitionerade mappen eller filerna
Du kan skapa en pipeline för att regelbundet rensa den tid partitionerade mappen eller filerna. Mappstrukturen liknar till exempel: /mycontainer/2018/12/14/*.csv
. Du kan använda tjänstsystemvariabeln från schemautlösaren för att identifiera vilken mapp eller vilka filer som ska tas bort i varje pipelinekörning.
Exempelpipeline
{
"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":[
]
}
}
Exempeldatauppsättning
{
"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"
}
}
}
}
}
Exempel på utlösare
{
"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
]
}
}
}
}
}
Rensa de utgångna filerna som senast ändrades före 2018.1.1
Du kan skapa en pipeline för att rensa de gamla eller utgångna filerna med hjälp av filter för filattribut: "LastModified" i datauppsättningen.
Exempelpipeline
{
"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":[
]
}
}
Exempeldatauppsättning
{
"name":"BlobFilesLastModifiedBefore201811",
"properties":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":"*",
"folderPath":"mydirectory",
"container":"mycontainer"
}
}
}
}
Flytta filer genom att länka kopieringsaktiviteten och ta bort-aktiviteten
Du kan flytta en fil med hjälp av en kopieringsaktivitet för att kopiera en fil och sedan en borttagningsaktivitet för att ta bort en fil i en pipeline. När du vill flytta flera filer kan du använda Aktiviteten GetMetadata + Filteraktivitet + Foreach-aktivitet + Kopieringsaktivitet + Ta bort aktivitet som i följande exempel.
Kommentar
Om du vill flytta hela mappen genom att definiera en datauppsättning som endast innehåller en mappsökväg och sedan använda en kopieringsaktivitet och en borttagningsaktivitet för att referera till samma datauppsättning som representerar en mapp, måste du vara mycket försiktig. Du måste se till att det inte kommer några nya filer till mappen mellan kopieringsåtgärden och borttagningsåtgärden. Om nya filer kommer till mappen när kopieringsaktiviteten precis har slutfört kopieringsjobbet, men aktiviteten Ta bort inte har startats, kan borttagningsaktiviteten ta bort den nyligen ankommande filen som INTE har kopierats till målet ännu genom att ta bort hela mappen.
Exempelpipeline
{
"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":[
]
}
}
Exempeldatauppsättningar
Datauppsättning som används av aktiviteten GetMetadata för att räkna upp fillistan.
{
"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"
}
}
}
}
}
Datauppsättning för datakälla som används av kopieringsaktiviteten och borttagningsaktiviteten.
{
"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"
}
}
}
}
}
Datauppsättning för datamål som används av kopieringsaktivitet.
{
"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"
}
}
}
}
}
Du kan också hämta mallen för att flytta filer härifrån.
Kända begränsningar
Borttagningsaktiviteten stöder inte borttagning av en lista över mappar som beskrivs med jokertecken.
När du använder filattributfilter i borttagningsaktiviteten: modifiedDatetimeStart och modifiedDatetimeEnd för att välja filer som ska tas bort, se till att ange "wildcardFileName": "*" även i borttagningsaktiviteten.
Relaterat innehåll
Läs mer om att flytta filer i Azure Data Factory- och Synapse-pipelines.