Limpe arquivos processados com o Auto Loader

Observação

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

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

Modo Description
OFF (predefinição) Os arquivos no diretório de origem não são movidos nem deletados.
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 (padrão de 30 dias) definida pelos cloudFiles.cleanSource.retentionDuration decorridos.
DELETE Os arquivos no diretório de origem são excluídos após o período de retenção (padrão de 30 dias) definido pelos cloudFiles.cleanSource.retentionDuration períodos decorridos.
Opção adicional Default Valores válidos Description
cloudFiles.cleanSource.retentionDuration 30 days Uma cadeia de caracteres CalendarInterval , como 14 days, 2 weeksou 1 month Tempo de espera antes que arquivos processados se tornem candidatos à limpeza com Clean Source. Deve ser superior a 7 dias para DELETE. Nenhuma restrição mínima para MOVE.
cloudFiles.cleanSource.waitForCompletion false true, false Essa opção está disponível no Databricks Runtime 19 e superiores.
O código limpo é, por padrão, uma operação de melhor esforço. Se o fluxo concluir o processamento dos arquivos antes que a fonte limpa termine de mover ou excluir arquivos, a operação da fonte limpa é encerrada. Configurar cloudFiles.cleanSource.waitForCompletion força a transmissão a permanecer ativa até que a fonte limpa termine de mover ou deletar arquivos. Isso pode aumentar o tempo de execução do stream se houver muitos arquivos para deletar.
Isso só se aplica quando o fluxo se completa sozinho (por exemplo, um availableNow gatilho drenando todos os arquivos). Parar ou cancelar manualmente o fluxo encerra imediatamente a operação de fonte limpa, mesmo quando essa opção está definida.
cloudFiles.cleanSource.moveDestination Nenhum Um caminho de volume de armazenamento em nuvem ou catálogo do Unity Caminho para arquivar arquivos processados quando cloudFiles.cleanSource estiver definido como MOVE. Pode ser um caminho de armazenamento em nuvem ou um caminho de volume do Catálogo do Unity (por exemplo, /Volumes/my_catalog/my_schema/my_volume/archive/).
O local de movimentação deve:
  • Não seja filho do diretório de origem. Se você colocar o destino de movimentação dentro do diretório de origem, os arquivos arquivados serão ingeridos novamente.
  • Esteja no mesmo local externo, volume ou montagem de DBFS que a origem. Não há suporte para movimentos entre buckets e entre contêineres e resulta em um erro.

O Carregador Automático deve ter permissões de gravação nesse diretório.

Considerações antes de habilitar cloudFiles.cleanSource

  • O Azure Databricks não recomenda usar essa opção quando múltiplos fluxos consomem dados do mesmo diretório de origem. O stream mais rápido limpa os arquivos, então os streams mais lentos nunca os ingerem.
  • Habilitar esse recurso requer que o Carregador Automático mantenha o estado adicional em seu ponto de verificação, o que incorre na sobrecarga de desempenho, mas permite uma melhor observabilidade por meio da cloud_files_state função com valor de tabela. Consulte TVF cloud_files_state.
  • O código limpo usa a configuração atual para decidir se é ou MOVEDELETE um determinado arquivo. 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. Nesse caso, o código fonte limpo exclui o arquivo.
  • Não há garantia de que os arquivos sejam limpos assim que a cloudFiles.cleanSource.retentionDuration expiração. Para manter os custos baixos, o Auto Loader limpa arquivos simultaneamente ao processamento do fluxo e termina assim que o processamento do fluxo é concluído ou é encerrado. Arquivos que eram candidatos à limpeza, mas não puderam ser limpos durante o processamento do fluxo, são retirados na próxima vez que o Auto Loader rodar.

Notas sobre fonte limpa

  • O código fonte limpo só roda se houver um lote de arquivos para processar. Não é um processo em segundo plano que roda independentemente da ingestão. Se não houver novos arquivos 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 para de receber novos arquivos, arquivos que já passaram pelo tempo de retenção não são limpos até que uma execução posterior processe um novo lote.

    Esse requisito de lote se aplica independentemente de cloudFiles.cleanSource.waitForCompletion. Essa opção só mantém a transmissão viva tempo suficiente para terminar uma limpeza em andamento dentro de uma run. Ele não inicia fonte limpa quando não há lote para processar.

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

  • O cenário commit_time é necessário, mas não suficiente. Um arquivo só é limpo quando sua duração de retenção terminar, medida a partir de seu commit_timearquivo . Por exemplo, com o padrão cloudFiles.cleanSource.retentionDuration de 30 dias, um arquivo processado hoje não é elegível para limpeza até 30 dias após sua commit_time definição. Isso vale independentemente de quantos cursos de riachos ocorram entre eles. Ambas as condições devem ser atendidas antes que o arquivo seja movido ou excluído.