Sdílet prostřednictvím


Odstranit aktivitu v Azure Data Factory a Azure Synapse Analytics

APPLIES TO: Azure Data Factory Azure Synapse Analytics

Tip

Data Factory v Microsoft Fabric je nová generace Azure Data Factory s jednodušší architekturou, integrovanou AI a novými funkcemi. Pokud s integrací dat začínáte, začněte Fabric Data Factory. Stávající úlohy ADF lze upgradovat na Fabric pro přístup k novým funkcím v oblastech datové vědy, analýz v reálném čase a vytváření sestav.

Aktivitu odstranění v Azure Data Factory můžete použít k odstranění souborů nebo složek z místních úložišť úložiště nebo z úložišť cloudového úložiště. Tato aktivita slouží k vyčištění nebo archivaci souborů, když už je nepotřebujete.

Upozornění

Odstraněné soubory nebo složky nelze obnovit (pokud úložiště nemá povolené obnovitelné odstranění). Při odstraňování souborů nebo složek pomocí aktivity odstranění postupujte opatrně.

Osvědčené postupy

Tady je několik doporučení pro použití aktivity Odstranění:

  • Před odstraněním souborů zálohujte soubory s aktivitou Odstranění v případě, že je v budoucnu potřebujete obnovit.

  • Ujistěte se, že služba má oprávnění k zápisu a mazání složek nebo souborů z úložiště.

  • Ujistěte se, že neodstraníte soubory, které se zapisují současně.

  • Pokud chcete odstranit soubory nebo složku z místního systému, ujistěte se, že používáte místní prostředí Integration Runtime s verzí vyšší než 3.14.

Podporovaná úložiště dat

Vytvoření aktivity odstranění pomocí uživatelského rozhraní

Pro použití aktivity odstranění v potrubí proveďte následující kroky:

  1. Vyhledejte Odstranění v podokně Aktivity datového kanálu a přetáhněte aktivitu Odstranění na plátno datového kanálu.

  2. Pokud ještě není vybraná, vyberte na plátně novou aktivitu Odstranit a její podrobnosti upravte na kartě Zdroj .

    Zobrazuje uživatelské rozhraní pro aktivitu odstranění.

  3. Vyberte existující nebo vytvořte novou datovou sadu určující soubory, které se mají odstranit. Pokud je vybráno více souborů, volitelně povolte rekurzivní odstranění, které odstraní i data v podřízených složkách. Můžete také zadat maximální počet souběžných připojení pro operaci.

  4. Volitelně můžete nakonfigurovat protokolování tak, že vyberete kartu Nastavení protokolování a poté vyberete existující umístění propojené služby účtu pro protokolování nebo vytvoříte nové, čímž budete schopni protokolovat výsledky operací odstranění.

    Zobrazuje kartu Nastavení protokolování pro aktivitu odstranění.

Syntaxe

{
    "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>"
        }
    }
}

Vlastnosti typu

Vlastnost Popis Požadováno
datová sada Poskytuje odkaz na datovou sadu pro určení souborů nebo složek, které se mají odstranit. Ano
rekurzivní Určuje, zda jsou soubory odstraněny rekurzivně z podsložek nebo pouze ze zadané složky. Ne. Výchozí hodnota je false.
maximálníPočetSoučasnýchPřipojení Počet současných připojení k úložišti pro odstranění složek nebo souborů. Ne. Výchozí hodnota je 1.
povolení protokolování Určuje, jestli potřebujete zaznamenat odstraněnou složku nebo názvy souborů. Pokud je pravda, budete muset dále poskytnout účet úložiště pro uložení souboru protokolu, abyste mohli sledovat chování aktivity odstranění přečtením souboru protokolu. Ne
Nastavení úložiště záznamů Platí pouze v případě, že enablelogging = true.

Skupinu vlastností úložiště, které lze určit, kam chcete uložit soubor protokolu obsahující názvy složek nebo souborů odstraněných aktivitou Odstranění.
Ne
názevPropojenéSlužby Platí pouze v případě, že enablelogging = true.

Propojená služba Azure Storage, Azure Data Lake Storage Gen1 nebo Azure Data Lake Storage Gen2 k uložení souboru protokolu, který obsahuje názvy složek nebo souborů odstraněných aktivitou Delete. Mějte na paměti, že musí být nakonfigurován stejný typ Integration Runtime jako ten, který používá aktivita odstranění pro odstraňování souborů.
Ne
cesta Platí pouze v případě, že enablelogging = true.

Cesta k uložení souboru protokolu do účtu úložiště. Pokud nezadáte nějakou cestu, služba za vás vytvoří kontejner.
Ne

Sledování

Existují dvě místa, kde můžete zobrazit a monitorovat výsledky aktivity odstranění:

  • Z výstupu aktivity Delete.
  • Ze souboru protokolu.

Ukázkový výstup aktivity Odstranění

{ 
  "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
}

Ukázkový soubor protokolu aktivity Odstranění

Název Kategorie Stav Chyba
test1/yyy.json Soubor Odstraněné
test2/hello789.txt Soubor Odstraněné
test2/test3/hello000.txt Soubor Odstraněné
test2/test3/zzz.json Soubor Odstraněné

Příklady použití aktivity Odstranění

Odstranění konkrétních složek nebo souborů

Úložiště má následující strukturu složek:

Kořen/
    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

Teď používáte aktivitu Odstranění k odstranění složek nebo souborů kombinací různých hodnot vlastností z datové sady a aktivity Delete:

folderPath název souboru rekurzivní Výstup
Kořen/ Folder_A_2 NULL Nepravda Kořen/
    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
Kořen/ Folder_A_2 NULL Pravda Kořen/
    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
Kořen/ Folder_A_2 *.txt Nepravda Kořen/
    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
Kořen/ Folder_A_2 *.txt Pravda Kořen/
    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

Pravidelné čištění časově dělené složky nebo souborů

Můžete vytvořit potrubí, které bude pravidelně čistit časově rozdělenou složku nebo soubory. Například struktura složek je podobná jako: /mycontainer/2018/12/14/*.csv. Systémovou proměnnou služby můžete použít ze spouštěče plánu k určení, které složky nebo soubory by měly být odstraněny při každém spuštění datového toku.

Ukázkový kanál

{
    "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":[

        ]
    }
}

Ukázková datová sada

{
    "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"
                }
            }
        }
    }
}

Příklad triggeru

{
    "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
                    ]
                }
            }
        }
    }
}

Vyčištění souborů s vypršenou platností, které byly naposledy změněny před 2018.1.1

Kanál pro vyčištění starých souborů nebo souborů s vypršenou platností můžete vytvořit pomocí filtru atributů souboru: LastModified v datové sadě.

Ukázkový kanál

{
    "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":[

        ]
    }
}

Ukázková datová sada

{
    "name":"BlobFilesLastModifiedBefore201811",
    "properties":{
        "linkedServiceName":{
            "referenceName":"BloblinkedService",
            "type":"LinkedServiceReference"
        },
        "annotations":[

        ],
        "type":"Binary",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "fileName":"*",
                "folderPath":"mydirectory",
                "container":"mycontainer"
            }
        }
    }
}

Přesuňte soubory propojením aktivity kopírování a aktivity mazání

Můžete přesunout soubor tak, že nejprve použijete aktivitu Kopírování ke zkopírování souboru a poté aktivitu Odstranění k jeho odstranění v kanálu. Pokud chcete přesunout více souborů, můžete použít aktivitu GetMetadata + Filtrovat aktivitu + Aktivita Foreach + aktivita Copy + Delete, jak je znázorněno v následující ukázce.

Poznámka:

Pokud chcete přesunout celou složku tím, že definujete datovou sadu obsahující pouze cestu ke složce, a poté použijete aktivitu "aktivita Copy" a "Delete activity", která odkazuje na stejnou datovou sadu představující složku, je třeba být velmi opatrní. Musíte zajistit, aby mezi operací kopírování a operací odstranění nebyly žádné nové soubory přicházející do složky. Pokud nové soubory dorazí do složky v okamžiku, kdy aktivita kopírování právě dokončila úlohu kopírování, ale aktivita Odstranění nebyla spuštěna, může odstranit nově přicházející soubor, který ještě nebyl zkopírován do cíle odstraněním celé složky.

Ukázkový kanál

{
    "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":[

        ]
    }
}

Ukázkové datové sady

Datová sada používaná aktivitou GetMetadata k vytvoření výčtu seznamu souborů

{
    "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"
                }
            }
        }
    }
}

Datová sada pro zdroj dat používaný aktivitou kopírování a aktivitou Delete

{
    "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"
                }
            }
        }
    }
}

Datová sada pro cíl dat používaný aktivitou kopírování

{
    "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"
                }
            }
        }
    }
}

Šablonu k přesunutí souborů můžete získat také odsud.

Známá omezení

  • Aktivita odstranění nepodporuje odstranění seznamu složek popsaných zástupným znakem.

  • Při použití filtru atributu souboru v aktivitě odstranění: modifiedDatetimeStart a modifiedDatetimeEnd k výběru souborů, které chcete odstranit, nezapomeňte také nastavit "wildcardFileName": "*" v aktivitě odstranění.

Přečtěte si další informace o přesouvání souborů v kanálech Azure Data Factory a Synapse.