Compartilhar via


Excluir atividade no Azure Data Factory e no Azure Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

Você pode usar a atividade Excluir no Azure Data Factory para excluir arquivos ou pastas de repositórios de armazenamento local ou de repositórios de armazenamento em nuvem. Use essa atividade para limpar ou arquivar arquivos quando eles não forem mais necessários.

Aviso

Arquivos ou pastas excluídos não podem ser restaurados (a menos que o armazenamento tenha a exclusão reversível habilitada). Tenha cuidado ao usar a atividade Excluir para excluir arquivos ou pastas.

Práticas recomendadas

Veja a seguir algumas recomendações para usar a atividade Excluir:

  • Faça backup dos arquivos antes de excluí-los usando a atividade Excluir, caso precise restaurá-los no futuro.

  • Certifique-se de que o serviço tenha permissões de gravação para excluir pastas ou arquivos do repositório de armazenamento.

  • Assegure-se de não excluir arquivos que estão sendo gravados ao mesmo tempo.

  • Se você quiser excluir arquivos ou pastas de um sistema local, verifique se está usando um runtime de integração auto-hospedada com uma versão superior a 3.14.

Armazenamento de dados com suporte

Criar uma atividade de Excluir com a interface do usuário

Para usar uma atividade de Excluir em um pipeline, conclua as seguintes etapas:

  1. Procure Excluir no painel Atividades do pipeline e arraste uma atividade Excluir para a tela do pipeline.

  2. Selecione a nova atividade Excluir na tela, se ela ainda não estiver selecionada, e sua guia Origem para editar seus detalhes.

    Mostra a interface do usuário da atividade de Exclusão.

  3. Selecione ou crie um conjunto de dados especificando os arquivos a serem excluídos. Se vários arquivos forem selecionados, opcionalmente, habilite a exclusão recursiva, que exclui os dados em todas as pastas filho também. Você também pode especificar um número máximo de conexões simultâneas para a operação.

  4. Opcionalmente, configure o log selecionando a guia Configurações de log e selecionando um local de serviço vinculado de conta de log ou criando um registro de log para registrar os resultados das operações de exclusão executadas.

    Mostra as  Configurações de registro  para uma atividade Excluir.

Sintaxe

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

Propriedades de tipo

Propriedade Descrição Obrigatório
dataset Fornece a referência de conjunto de dados para determinar quais arquivos ou pasta serão excluídos Sim
recursiva Indica se os arquivos são excluídos recursivamente das subpastas ou somente da pasta especificada. Não. O padrão é false.
maxConcurrentConnections O número das conexões para se conectar ao repositório de armazenamento simultaneamente para exclusão de arquivos ou pasta. Não. O padrão é 1.
habilite o registro em logs Indica se você precisa gravar a pasta ou os nomes de arquivo excluídos. Em caso afirmativo, você precisa fornecer uma conta de armazenamento para salvar o arquivo de log, de modo que seja possível rastrear os comportamentos da atividade Excluir lendo o arquivo de log. Não
logStorageSettings Aplicável somente quando enablelogging = true.

Um grupo de propriedades de armazenamento que podem ser especificadas onde você deseja salvar o arquivo de log que contém a pasta ou os nomes de arquivo excluídos pela atividade Delete.
Não
linkedServiceName Aplicável somente quando enablelogging = true.

O serviço vinculado do Azure Storage, Azure Data Lake Storage Gen1 ou Azure Data Lake Storage Gen2 para armazenar o arquivo de log que contém a pasta ou os nomes de arquivo excluídos pela atividade Delete. Lembre-se de que ele deve ser configurado com o mesmo tipo de Integration Runtime de um usado pela atividade de exclusão para excluir arquivos.
Não
caminho Aplicável somente quando enablelogging = true.

O caminho para salvar o arquivo de log em sua conta de armazenamento. Se você não fornecer um caminho, o serviço criará um contêiner para você.
Não

Monitoramento

Há dois locais em que você pode ver e monitorar os resultados da atividade Excluir:

  • Na saída da atividade Excluir.
  • No arquivo de log.

Amostra de saída da atividade Excluir

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

Amostra de arquivo de log da atividade Excluir

Nome Categoria Status Erro
test1/yyy.json Arquivo Excluído
test2/hello789.txt Arquivo Excluído
test2/test3/hello000.txt Arquivo Excluído
test2/test3/zzz.json Arquivo Excluído

Exemplos de como usar a atividade Excluir

Excluir pastas ou arquivos específicos

O repositório tem a seguinte estrutura de pasta:

Root/
    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

Agora você está usando a atividade Delete para excluir pastas ou arquivos pela combinação de diferentes valores de propriedade do conjunto de dados e da atividade Delete:

folderPath fileName recursiva Saída
Root/ Folder_A_2 NULO Falso Root/
    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
Root/ Folder_A_2 NULO True Root/
    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
Root/ Folder_A_2 *.txt Falso Root/
    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
Root/ Folder_A_2 *.txt True Root/
    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

Limpar periodicamente os arquivos ou a pasta particionados pelo tempo

Você pode criar um pipeline para limpar periodicamente a pasta ou os arquivos particionados pelo tempo. Por exemplo, a estrutura da pasta é semelhante a: /mycontainer/2018/12/14/*.csv. Você pode usar a variável de sistema de serviço do gatilho de agendamento para identificar qual pasta ou arquivos devem ser excluídos em cada execução de pipeline.

Amostra do 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":[

        ]
    }
}

Amostra do conjunto de dados

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

Gatilho de exemplo

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

Limpar os arquivos expirados que foram modificados pela última vez antes de 2018.1.1

Você pode criar um pipeline para limpar os arquivos antigos ou expirados usando o filtro de atributo de arquivo: "LastModified" no conjunto de dados.

Amostra do 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":[

        ]
    }
}

Amostra do conjunto de dados

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

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

Mover arquivos por meio do encadeamento da atividade Copiar e da atividade Excluir

Você pode mover um arquivo usando uma atividade Copy para copiar um arquivo e, em seguida, uma atividade Delete para excluir um arquivo em um pipeline. Para mover vários arquivos, você pode usar a atividade GetMetadata + atividade Filter + atividade Foreach + atividade Copy + atividade Delete, como no exemplo a seguir.

Observação

Se você quiser mover a pasta inteira definindo um conjunto de dados que contenha apenas um caminho de pasta e, em seguida, usando uma atividade Copy e a atividade Delete para fazer referência ao mesmo conjunto de dados que representa uma pasta, será preciso ter muito cuidado. Você deve garantir que não haverá nenhum arquivo novo chegando à pasta entre a operação de cópia e a operação de exclusão. Se novos arquivos chegarem à pasta no momento em que a atividade de cópia tiver acabado o trabalho de cópia, mas a atividade Delete ainda não tiver sido iniciada, a atividade Delete poderá excluir o arquivo recém chegado que ainda NÃO tenha sido copiado para o destino ao excluir a pasta inteira.

Amostra do 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":[

        ]
    }
}

Conjuntos de dados de amostra

O conjunto de dados usado pela atividade GetMetadata para enumerar a lista de arquivos.

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

O conjunto de dados da fonte de dados usado pelas atividades Copiar e Excluir.

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

O conjunto de dados do destino de dados usado pela atividade Copiar.

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

Você também pode obter o modelo para mover os arquivos aqui.

Limitações conhecidas

  • A atividade de exclusão não dá suporte à exclusão da lista de pastas descritas pelo curinga.

  • Ao usar o filtro de atributo de arquivo na atividade de exclusão: modifiedDatetimeStart e modifiedDatetimeEnd para selecionar os arquivos a serem excluídos, defina “wildcardFileName”: “*” na atividade de exclusão também.

Saiba mais sobre como mover arquivos nos pipelines do Azure Data Factory e do Synapse.