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

Criar uma atividade Excluir com a interface do usuário

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

  1. Procure por 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 ainda não estiver selecionada, e a guia Origem , para editar seus detalhes.

    Shows the UI for a Delete activity.

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

    Shows the  Logging settings  tab for a Delete activity.

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ão 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ão 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 Category Status Error
test1/yyy.json Ficheiro Eliminada
test2/hello789.txt Ficheiro Eliminada
test2/test3/hello000.txt Ficheiro Eliminada
test2/test3/zzz.json Ficheiro Eliminada

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/
        4.txt
        5.csv
        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
    Folder_A_2/
        4.txt
        5.csv
        Folder_B_1/
            6.txt
            7.csv
        Folder_B_2/
            8.txt
Raiz/ Folder_A_2 *.txt False 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 True 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 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.

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