Partilhar via


Excluir atividade no Azure Data Factory e no Azure Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises 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 armazenamentos locais ou armazenamentos na nuvem. Use essa atividade para limpar ou arquivar arquivos quando eles não forem mais necessários.

Aviso

Os ficheiros ou pastas eliminados não podem ser restaurados (a menos que o armazenamento tenha a eliminação suave ativada). Tenha cuidado ao utilizar a ação Eliminar para eliminar ficheiros ou pastas.

Melhores práticas

Aqui estão algumas recomendações para usar a atividade Excluir:

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

  • Verifique se o serviço tem permissões de escrita para excluir pastas ou arquivos do armazenamento.

  • Certifique-se de que não está a eliminar ficheiros que estão a ser escritos ao mesmo tempo.

  • Se você quiser excluir arquivos ou pastas de um sistema local, verifique se está usando um tempo de execução de integração auto-hospedado com uma versão maior que 3.14.

Arquivos de dados suportados

Criar uma atividade de exclusão com a IU

Para usar uma atividade de eliminação em um pipeline, conclua as seguintes etapas:

  1. Pesquise por Excluir no painel de Atividades do pipeline e arraste uma atividade Excluir para a área de trabalho do pipeline.

  2. Selecione a nova atividade Excluir na tela, caso ainda não a tenha selecionado, e a guia Origem, para editar os seus detalhes.

    Mostra a interface de utilizador para uma atividade de exclusão.

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

  4. Opcionalmente, configure o registo em log selecionando o separador Configurações de log e escolhendo uma localização de serviço associada a uma conta de registo existente ou criando uma nova, para registar os resultados das operações de eliminação realizadas.

    Mostra o separador de Configurações de Registo para uma atividade de Eliminar.

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 do tipo

Propriedade Descrição Obrigatório
conjunto de dados Fornece a referência do conjunto de dados para determinar quais arquivos ou pastas devem ser excluídos Sim
recursiva Indica se os arquivos são excluídos recursivamente das subpastas ou somente da pasta especificada. N.º A predefinição é false.
máximoDeConexõesConcorrentes O número de conexões ao armazenamento realizadas simultaneamente para excluir pastas ou arquivos. N.º A predefinição é 1.
Ativar registro em log Indica se você precisa registrar os nomes de pastas ou arquivos excluídos. Se verdadeiro, você precisa fornecer ainda mais uma conta de armazenamento para salvar o arquivo de log, para que você possa controlar os comportamentos da atividade Excluir lendo o arquivo de log. Não
configuraçõesDeArmazenamentoDeRegistros Aplicável apenas quando enablelogging = true.

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

O serviço vinculado do Armazenamento do Azure, Armazenamento Azure Data Lake Gen1 ou Armazenamento Azure Data Lake Gen2 para armazenar o arquivo de log que contém os nomes de pasta ou arquivo eliminados pela atividade de Eliminação. Esteja ciente de que ele deve ser configurado com o mesmo tipo de tempo de execução de integração daquele usado pela atividade de exclusão para excluir arquivos.
Não
caminho Aplicável apenas 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

Monitorização

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

  • A partir da saída da atividade Eliminar.
  • A partir do ficheiro de registo.

Exemplo de saída da atividade Delete

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

Exemplo de arquivo de log da atividade Excluir

Nome Categoria Status Erro
teste1/yyy.json Ficheiro Eliminado
teste2/hello789.txt Ficheiro Eliminado
teste2/teste3/hello000.txt Ficheiro Eliminado
teste2/teste3/zzz.json Ficheiro Eliminado

Exemplos de utilização da atividade Eliminar

Excluir pastas ou arquivos específicos

O repositório tem a seguinte estrutura de pastas:

Raiz/
    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 Excluir para excluir pastas ou arquivos pela combinação de diferentes valores de propriedade do conjunto de dados e da atividade Excluir:

folderPath nome do ficheiro recursiva Saída
Raiz/ Folder_A_2 NULL Falso Raiz/
    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
Raiz/ Folder_A_2 NULL Verdadeiro Raiz/
    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
Raiz/ Folder_A_2 *.txt Falso Raiz/
    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
Raiz/ Folder_A_2 *.txt Verdadeiro Raiz/
    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

Limpe periodicamente a pasta ou os arquivos particionados por tempo

Você pode criar um pipeline para limpar periodicamente pastas ou ficheiros particionados por tempo. Por exemplo, a estrutura de pastas é 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.

Canal de amostra

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

        ]
    }
}

Conjunto de dados de exemplo

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

Trigger 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 ficheiros 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.

Exemplo de 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":[

        ]
    }
}

Conjunto de dados de exemplo

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

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

Mover arquivos encadeando a atividade Copiar e a atividade Excluir

Você pode mover um arquivo usando uma atividade Copiar para copiar um arquivo e, em seguida, uma atividade Excluir para excluir um arquivo em um pipeline. Quando quiser mover vários arquivos, você pode usar a atividade GetMetadata + Atividade de filtro + Atividade Foreach + Atividade de cópia + Atividade de exclusão como no exemplo a seguir.

Nota

Se você quiser mover a pasta inteira definindo um conjunto de dados contendo apenas um caminho de pasta e, em seguida, usando uma atividade Copiar e uma atividade Excluir para fazer referência ao mesmo conjunto de dados que representa uma pasta, você precisa ter muito cuidado. Você deve garantir que não haverá novos arquivos 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 sua atividade de cópia acabou de concluir o trabalho de cópia, mas a atividade Excluir não tiver sido iniciada, a atividade Excluir poderá excluir o arquivo recém-chegado que AINDA NÃO foi copiado para o destino, excluindo a pasta inteira.

Linha de processamento exemplar

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

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

Conjunto de dados para a fonte de dados usada pela atividade de cópia e pela atividade 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"
                }
            }
        }
    }
}

Conjunto de dados para o destino dos dados usado pela atividade de cópia.

{
    "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 arquivos daqui.

Limitações conhecidas

  • A atividade de eliminação não suporta a exclusão de listas de pastas descritas por caracteres 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, certifique-se de definir "wildcardFileName": "*" na atividade de exclusão também.

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