Ta bort aktivitet i Azure Data Factory och Azure Synapse Analytics

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

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 aktiverad). 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.

  • Kontrollera 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

Skapa en borttagningsaktivitet med användargränssnittet

Utför följande steg för att använda en borttagningsaktivitet i en pipeline:

  1. Sök efter Ta bort i fönstret Pipelineaktiviteter och dra en borttagningsaktivitet till pipelinearbetsytan.

  2. Välj den nya borttagningsaktiviteten på arbetsytan om den inte redan är markerad och fliken Källa för att redigera informationen.

    Shows the UI for a Delete activity.

  3. Välj en befintlig eller skapa en ny datauppsättning som anger vilka filer som ska tas bort. Om flera filer har valts 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.

  4. 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 borttagningsåtgärder som utförts.

    Shows the  Logging settings  tab for a Delete activity.

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

Egenskap Beskrivning Krävs
Datamängd Innehåller datauppsättningsreferensen 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 bara från den angivna mappen. Nej. Standardvärdet är false.
maxConcurrentConnections Antalet anslutningar som ska anslutas till lagringsarkivet samtidigt för att ta bort mappar eller filer. Nej. Standardvärdet är 1.
aktivera loggning Anger om du behöver registrera mappen eller filnamnen som har tagits bort. 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. Inga
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 har tagits bort av borttagningsaktiviteten.
Inga
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 har tagits bort av borttagningsaktiviteten. Tänk på att den måste konfigureras med samma typ av Integration Runtime från den som används av borttagningsaktiviteten för att ta bort filer.
Inga
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.
Inga

Övervakning

Det finns två platser där du kan se och övervaka resultatet av borttagningsaktiviteten:

  • Från utdata från borttagningsaktiviteten.
  • 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 borttagningsaktiviteten för att ta bort mappar eller filer genom att kombinera olika egenskapsvärden från datauppsättningen och borttagningsaktiviteten:

folderPath fileName Rekursiv Utdata
Rot/Folder_A_2 NULL Falskt 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
Rot/Folder_A_2 NULL Sant 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
Rot/Folder_A_2 *.txt Falskt 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
Rot/Folder_A_2 *.txt Sant 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

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 genom att använda filattributfiltret: "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 aktiviteten Kopiera- och borttagningsaktiviteten

Du kan flytta en fil med hjälp av en aktiviteten Kopiera 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 + aktiviteten Kopiera + Ta bort som i följande exempel.

Anteckning

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 aktiviteten Kopiera 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 delete-aktiviteten 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 GetMetadata-aktiviteten 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änd begränsning

  • 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 "jokerteckenFilnamn": "*" även i borttagningsaktiviteten.

Nästa steg

Läs mer om att flytta filer i Azure Data Factory- och Synapse-pipelines.