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 opção Excluir atividade no Azure Data Factory para excluir arquivos ou pastas de armazenamentos de armazenamento locais ou armazenamentos de armazenamento em 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 gravação para excluir pastas ou arquivos do armazenamento de 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
- Armazenamento de Blobs do Azure
- Armazenamento do Azure Data Lake Ger1
- Azure Data Lake Storage Gen2 (Armazenamento do Azure Data Lake Gen2)
- Ficheiros do Azure
- Sistema de Ficheiros
- FTP
- SFTP
- Microsoft Fabric Lakehouse
- Amazon S3
- Armazenamento compatível com Amazon S3
- Google Cloud Storage
- Armazenamento em nuvem Oracle
- HDFS
Criar uma atividade Excluir com a interface do usuário
Para usar uma atividade Delete em um pipeline, conclua as seguintes etapas:
Procure por Excluir no painel Atividades do pipeline e arraste uma atividade Excluir para a tela do pipeline.
Selecione a nova atividade Excluir na tela, se ainda não estiver selecionada, e a guia Origem , para editar seus detalhes.
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.
Opcionalmente, configure o registro em log selecionando a guia Configurações de log e selecionando um local de serviço vinculado de conta de log existente ou criando um novo para registrar os resultados das operações de exclusão executadas.
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
Property | 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 . |
maxConcurrentConnections | O número de conexões a serem conectadas ao armazenamento de armazenamento 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 |
logStorageSettings | 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, Azure Data Lake Storage Gen1 ou Azure Data Lake Storage Gen2 para armazenar o arquivo de log que contém os nomes de pasta ou arquivo excluídos pela atividade Excluir. 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 |
path | 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 Delete.
- 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 | fileName | recursiva | Saída |
---|---|---|---|
Raiz/ Folder_A_2 | NULL | False | Raiz/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Raiz/ Folder_A_2 | NULL | True | Raiz/ Folder_A_1/ 1.txt 2.txt 3.csv |
Raiz/ Folder_A_2 | *.txt | False | Raiz/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Raiz/ Folder_A_2 | *.txt | True | Raiz/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 7.csv Folder_B_2/ |
Limpe periodicamente a pasta ou os arquivos particionados por tempo
Você pode criar um pipeline para limpar periodicamente a pasta ou os arquivos 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.
Pipeline 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"
}
}
}
}
}
Acionador 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.
Pipeline de amostra
{
"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.
Pipeline de amostra
{
"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
Excluir atividade não suporta a exclusão da lista de pastas descritas por 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.
Conteúdos relacionados
Saiba mais sobre como mover arquivos nos pipelines do Azure Data Factory e Synapse.