Limpar ficheiros processados com o Auto Loader

Note

cloudFiles.cleanSource está disponível em Databricks Runtime 16.4 e superiores.

cloudFiles.cleanSource Use para mover ou eliminar ficheiros do diretório de origem depois de processados. Remover ficheiros processados reduz os custos de armazenamento e encurta a duração das futuras operações de listagem.

Mode Description
OFF (predefinição) Os ficheiros no diretório de origem não são movidos nem eliminados.
MOVE Os ficheiros no diretório de origem são movidos para o caminho especificado por cloudFiles.cleanSource.moveDestination após a duração de retenção (padrão de 30 dias) definida pelos cloudFiles.cleanSource.retentionDuration elapses.
DELETE Os ficheiros no diretório de origem são eliminados após a duração de retenção (padrão de 30 dias) definida pelo cloudFiles.cleanSource.retentionDuration decorrido.
Opção adicional Default Valores válidos Description
cloudFiles.cleanSource.retentionDuration 30 days Uma cadeia CalendarInterval como 14 days, 2 weeks, ou 1 month Tempo a esperar até que os ficheiros processados se tornem candidatos à limpeza com código limpo. Deve ser superior a 7 dias para DELETE. Nenhuma restrição mínima para MOVE.
cloudFiles.cleanSource.waitForCompletion false true, false Esta opção está disponível no Databricks Runtime 19 e superiores.
A fonte limpa é, por defeito, uma operação de melhor esforço. Se o fluxo terminar de processar ficheiros antes de o código de código limpo terminar de mover ou eliminar ficheiros, a operação de fonte limpa é terminada. A definição cloudFiles.cleanSource.waitForCompletion obriga a transmissão a manter-se ativa até que o código limpo termine de mover ou eliminar ficheiros. Isto pode aumentar o tempo de execução do stream se houver muitos ficheiros para eliminar.
Isto só se aplica quando o fluxo termina sozinho (por exemplo, um availableNow gatilho que drena todos os ficheiros). Parar ou cancelar manualmente o fluxo termina imediatamente a operação da fonte limpa, mesmo quando esta opção está definida.
cloudFiles.cleanSource.moveDestination None Um caminho de armazenamento em nuvem ou de volumes do Unity Catalog Caminho para guardar ficheiros processados quando cloudFiles.cleanSource está configurado para MOVE. Isto pode ser um caminho de armazenamento na cloud ou um caminho de volume do Unity Catalog (por exemplo, /Volumes/my_catalog/my_schema/my_volume/archive/).
O local de mudança deve:
  • Não ser filho do diretório de origem. Se colocares o destino do movimento dentro do diretório de origem, os ficheiros arquivados são ingeridos novamente.
  • Esteja na mesma localização externa, volume ou montagem DBFS que a fonte. Os movimentos entre buckets e entre contentores não são suportados e resultam em erro.

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

Considerações antes de permitir cloudFiles.cleanSource

  • O Azure Databricks não recomenda usar esta opção quando múltiplos fluxos consomem dados do mesmo diretório de origem. O stream mais rápido limpa os ficheiros, por isso os streams mais lentos nunca os ingerem.
  • Ativar esta funcionalidade requer que o Auto Loader mantenha um estado adicional no seu checkpoint, o que gera sobrecarga de desempenho mas permite uma melhor observabilidade através da cloud_files_state função de valores de tabela. Consulte cloud_files_state função de valor de tabela.
  • O código limpo usa a definição atual para decidir se o faz MOVE ou DELETE um dado ficheiro. Por exemplo, suponha que a configuração foi MOVE quando o arquivo foi originalmente processado, mas foi alterado para DELETE quando o arquivo se tornou um candidato para limpeza 30 dias depois. Neste caso, uma fonte limpa apaga o ficheiro.
  • Não é garantido que os ficheiros sejam limpos assim que expiram cloudFiles.cleanSource.retentionDuration . Para manter os custos baixos, o Auto Loader limpa os ficheiros em simultâneo com o processamento do fluxo e termina assim que o processamento do fluxo termina ou termina. Ficheiros que eram candidatos à limpeza, mas que não puderam ser limpos durante o processamento do fluxo, são recolhidos na próxima vez que o Auto Loader for executado.

Notas sobre Clean Source

  • O código de código limpo só corre se houver um lote de ficheiros para processar. Não é um processo em segundo plano que funcione independentemente da ingestão. Se não houver novos ficheiros para ingerir no diretório de origem, o código limpo não inicia para a execução atual do fluxo. Como resultado, se um fluxo deixar de receber novos ficheiros, os ficheiros que já passaram a sua duração de retenção não são limpos até que uma sequência posterior processe um novo lote.

    Este requisito de lote aplica-se independentemente de cloudFiles.cleanSource.waitForCompletion. Essa opção só mantém a transmissão viva tempo suficiente para terminar uma limpeza em curso durante uma corrida. Não arranca de origem limpa quando não há lote para processar.

  • Se um ficheiro for ingerido na enésima corrida do fluxo, o commit_time para o ficheiro é definido na execução do fluxo N+1. commit_time deve ser definido antes que a fonte limpa possa determinar se um ficheiro é elegível para mover ou eliminar, pelo que o mais cedo que um ficheiro pode tornar-se candidato à limpeza é a execução do fluxo N+2.

  • O cenário commit_time é necessário, mas não suficiente. Um ficheiro só é limpo depois de a sua duração de retenção ter terminado, medida a partir do seu commit_timearquivo . Por exemplo, com o padrão cloudFiles.cleanSource.retentionDuration de 30 dias, um ficheiro processado hoje não é elegível para limpeza até 30 dias depois de ter commit_time sido definido. Isto mantém-se independentemente do número de corridas de ribeiros que ocorrem entre elas. Ambas as condições devem ser cumpridas antes de o ficheiro ser movido ou eliminado.