Pular para o conteúdo principal

Limpar arquivos processados com o Auto Loader

nota

cloudFiles.cleanSource está disponível no Databricks Runtime 16.4 e acima.

Use cloudFiles.cleanSource para mover ou excluir arquivos do diretório de origem após serem processados. A remoção de arquivos processados reduz os custos de armazenamento e encurta a duração de futuras operações de listagem.

Mode

Descrição

OFF (padrão)

Os arquivos no diretório de origem não são movidos ou excluídos.

MOVE

Os arquivos no diretório de origem são movidos para o caminho especificado por cloudFiles.cleanSource.moveDestination após a duração de retenção (default de 30 dias) definida por cloudFiles.cleanSource.retentionDuration decorrer.

DELETE

Os arquivos no diretório de origem são excluídos após o término da duração de retenção (default de 30 dias) definida por cloudFiles.cleanSource.retentionDuration.

Mode

Descrição

OFF (padrão)

Os arquivos no diretório de origem não são movidos ou excluídos.

MOVE

Os arquivos no diretório de origem são movidos para o caminho especificado por cloudFiles.cleanSource.moveDestination após a duração de retenção (default de 30 dias) definida por cloudFiles.cleanSource.retentionDuration decorrer.

DELETE

Os arquivos no diretório de origem são excluídos após o término da duração de retenção (default de 30 dias) definida por cloudFiles.cleanSource.retentionDuration.

Opção adicional

Padrão

Valores válidos

Descrição

cloudFiles.cleanSource.retentionDuration

30 days

Uma string CalendarInterval como 14 days, 2 weeks ou 1 month

Quantidade de tempo a aguardar antes que os arquivos processados se tornem candidatos à limpeza com a origem de limpeza. Deve ser maior que 7 dias para DELETE. Sem restrição mínima para MOVE.

cloudFiles.cleanSource.waitForCompletion

false

true, false

Esta opção está disponível no Databricks Runtime 19 e acima.

A origem limpa é, por default, uma operação de melhor esforço. Se a transmissão concluir o processamento de arquivos antes que a origem limpa termine de mover ou excluir arquivos, a operação de origem limpa será encerrada. Definir cloudFiles.cleanSource.waitForCompletion força a transmissão a permanecer ativa até que a origem limpa termine de mover ou excluir arquivos. Isso pode aumentar o tempo de execução da transmissão se houver muitos arquivos para excluir.

Isso só se aplica quando a transmissão é concluída por conta própria (por exemplo, um trigger availableNow esvaziando todos os arquivos). Parar ou cancelar manualmente a transmissão encerra a operação de limpeza da origem imediatamente, mesmo quando essa opção está definida.

cloudFiles.cleanSource.moveDestination

Nenhuma

Um caminho de armazenamento em nuvem ou de volume do Unity Catalog

Caminho para arquivar arquivos processados quando cloudFiles.cleanSource estiver definido como MOVE. Este pode ser um caminho de armazenamento em cloud ou um caminho de volume do Unity Catalog (por exemplo, /Volumes/my_catalog/my_schema/my_volume/archive/).

O local de movimentação deve:

  • Não ser um subdiretório do diretório de origem. Se você colocar o destino da movimentação dentro do diretório de origem, os arquivos arquivados serão ingeridos novamente.
  • Esteja no mesmo local externo, volume ou montagem DBFS que a origem. Movimentações entre buckets e entre contêineres não são suportadas e resultam em um erro.

O Auto Loader deve ter permissões de gravação para este diretório.

Opção adicional

Padrão

Valores válidos

Descrição

cloudFiles.cleanSource.retentionDuration

30 days

Uma string CalendarInterval como 14 days, 2 weeks ou 1 month

Quantidade de tempo a aguardar antes que os arquivos processados se tornem candidatos à limpeza com a origem de limpeza. Deve ser maior que 7 dias para DELETE. Sem restrição mínima para MOVE.

cloudFiles.cleanSource.waitForCompletion

false

true, false

Esta opção está disponível no Databricks Runtime 19 e acima.

A origem limpa é, por default, uma operação de melhor esforço. Se a transmissão concluir o processamento de arquivos antes que a origem limpa termine de mover ou excluir arquivos, a operação de origem limpa será encerrada. Definir cloudFiles.cleanSource.waitForCompletion força a transmissão a permanecer ativa até que a origem limpa termine de mover ou excluir arquivos. Isso pode aumentar o tempo de execução da transmissão se houver muitos arquivos para excluir.

Isso só se aplica quando a transmissão é concluída por conta própria (por exemplo, um trigger availableNow esvaziando todos os arquivos). Parar ou cancelar manualmente a transmissão encerra a operação de limpeza da origem imediatamente, mesmo quando essa opção está definida.

cloudFiles.cleanSource.moveDestination

Nenhuma

Um caminho de armazenamento em nuvem ou de volume do Unity Catalog

Caminho para arquivar arquivos processados quando cloudFiles.cleanSource estiver definido como MOVE. Este pode ser um caminho de armazenamento em cloud ou um caminho de volume do Unity Catalog (por exemplo, /Volumes/my_catalog/my_schema/my_volume/archive/).

O local de movimentação deve:

  • Não ser um subdiretório do diretório de origem. Se você colocar o destino da movimentação dentro do diretório de origem, os arquivos arquivados serão ingeridos novamente.
  • Esteja no mesmo local externo, volume ou montagem DBFS que a origem. Movimentações entre buckets e entre contêineres não são suportadas e resultam em um erro.

O Auto Loader deve ter permissões de gravação para este diretório.

Considerações antes de habilitar cloudFiles.cleanSource

  • O Databricks não recomenda o uso desta opção quando várias transmissões consomem dados do mesmo diretório de origem. A transmissão mais rápida limpa os arquivos, portanto, as transmissões mais lentas nunca os ingerem.
  • Habilitar esse recurso exige que o Auto Loader mantenha um estado adicional em seu checkpoint, o que gera sobrecarga de desempenho, mas permite uma observabilidade aprimorada por meio da função de valor de tabela cloud_files_state. Consulte função de valor de tabelacloud_files_state.
  • A origem de limpeza usa a configuração atual para decidir se deve MOVE ou DELETE um determinado arquivo. Por exemplo, suponha que a configuração era MOVE quando o arquivo foi processado originalmente, mas foi alterada para DELETE quando o arquivo se tornou um candidato à limpeza 30 dias depois. Nesse caso, a origem de limpeza exclui o arquivo.
  • Não há garantia de que os arquivos sejam limpos assim que o cloudFiles.cleanSource.retentionDuration expirar. Para manter os custos baixos, o Auto Loader limpa os arquivos simultaneamente ao processamento da transmissão e é encerrado assim que o processamento da transmissão é concluído ou interrompido. Os arquivos que eram candidatos à limpeza, mas que não puderam ser limpos durante o processamento da transmissão, são coletados na próxima vez que o Auto Loader for executado.

Notas sobre a origem limpa

  • A limpeza da fonte só ocorre se houver um lote de arquivos para processar. Não é um processo em segundo plano que ocorre independentemente da ingestão. Se não houver novos arquivos para ingerir no diretório de origem, a limpeza da fonte não começa para a execução de transmissão atual. Como resultado, se uma transmissão parar de receber novos arquivos, os arquivos que já ultrapassaram sua duração de retenção não serão limpos até que uma execução de transmissão posterior processe um novo lote.

    Este requisito de lote se aplica independentemente de cloudFiles.cleanSource.waitForCompletion. Essa opção apenas mantém a transmissão ativa por tempo suficiente para concluir uma limpeza em andamento dentro de uma execução. Ele não inicia a fonte de limpeza quando não há nenhum lote para processar.

  • Se um arquivo for ingerido na N-ésima execução de transmissão, o commit_time para o arquivo será definido na execução de transmissão N+1. commit_time deve ser definido antes que a origem de limpeza possa determinar se um arquivo é elegível para movimentação ou exclusão, portanto, o momento mais cedo em que um arquivo pode se tornar um candidato para limpeza é na execução de transmissão N+2.

  • Definir commit_time é necessário, mas não suficiente. Um arquivo só é limpo após a sua duração de retenção ter decorrido, medida a partir de commit_time. Por exemplo, com o cloudFiles.cleanSource.retentionDuration default de 30 dias, um arquivo processado hoje não é elegível para limpeza até 30 dias após a definição de seu commit_time. Isso é válido independentemente de quantas execuções de transmissão ocorram nesse intervalo. Ambas as condições devem ser atendidas antes que o arquivo seja movido ou excluído.