Limpiar archivos procesados con Auto Loader

Nota:

cloudFiles.cleanSource está disponible en Databricks Runtime 16.4 y superiores.

Se usa cloudFiles.cleanSource para mover o eliminar archivos del directorio fuente después de procesarlos. Eliminar archivos procesados reduce los costes de almacenamiento y acorta la duración de futuras operaciones de listado.

Mode Description
OFF (valor predeterminado) Los archivos del directorio fuente no se mueven ni se eliminan.
MOVE Los archivos en el directorio fuente se mueven a la ruta especificada por cloudFiles.cleanSource.moveDestination después de la duración de retención (por defecto 30 días) definida por cloudFiles.cleanSource.retentionDuration los transcurridos.
DELETE Los archivos en el directorio fuente se eliminan tras la duración de conservación (por defecto 30 días) definida por cloudFiles.cleanSource.retentionDuration los transcurridos.
Opción adicional Predeterminado Valores válidos Description
cloudFiles.cleanSource.retentionDuration 30 days Una cadena CalendarInterval , como 14 days, 2 weekso 1 month Tiempo de espera antes de que los archivos procesados se conviertan en candidatos para limpieza con código limpio. Debe ser mayor que 7 días para DELETE. No hay ninguna restricción mínima para MOVE.
cloudFiles.cleanSource.waitForCompletion false true, false Esta opción está disponible en Databricks Runtime 19 en adelante.
Clean source es por defecto una operación de mejor esfuerzo. Si el flujo termina de procesar archivos antes de que el código fuente limpio termine de mover o eliminar archivos, la operación de fuente limpia se termina. Configurar cloudFiles.cleanSource.waitForCompletion obliga al stream a mantenerse vivo hasta que la fuente limpia termina de mover o eliminar archivos. Esto puede aumentar el tiempo de ejecución del stream si hay muchos archivos que eliminar.
Esto solo se aplica cuando el flujo se completa por sí solo (por ejemplo, un availableNow disparador que drena todos los archivos). Detener o cancelar manualmente la transmisión termina inmediatamente la operación de fuente limpia, incluso cuando esta opción está activada.
cloudFiles.cleanSource.moveDestination Ninguno Una ruta de acceso de volumen del catálogo de Unity o almacenamiento en la nube Ruta de acceso para archivar los archivos procesados cuando cloudFiles.cleanSource se establece en MOVE. Puede ser una ruta de acceso de almacenamiento en la nube o una ruta de acceso de volumen del catálogo de Unity (por ejemplo, /Volumes/my_catalog/my_schema/my_volume/archive/).
La ubicación de movimiento debe:
  • No sea un elemento secundario del directorio de origen. Si coloca el destino de movimiento dentro del directorio de origen, los archivos archivados se ingieren de nuevo.
  • Estar en la misma ubicación externa, volumen o montaje de DBFS que el origen. No se admiten movimientos entre buckets y contenedores, lo que resulta en un error.

Auto Loader debe tener permisos de escritura en este directorio.

Consideraciones antes de habilitar cloudFiles.cleanSource

  • Azure Databricks no recomienda usar esta opción cuando varios flujos consumen datos del mismo directorio fuente. El stream más rápido limpia los archivos, así que los más lentos nunca los ingieren.
  • La habilitación de esta característica requiere que el cargador automático mantenga un estado adicional en su punto de control, lo que incurre en sobrecarga de rendimiento, pero permite una observabilidad mejorada a través de la cloud_files_state función con valores de tabla. Consulte cloud_files_state función con valores de tabla.
  • Código fuente limpio utiliza la configuración actual para decidir si hacerlo MOVE o DELETE un archivo dado. Por ejemplo, supongamos que la configuración era MOVE cuando el archivo se procesó originalmente, pero se cambió a DELETE cuando el archivo se convirtió en candidato para la limpieza de 30 días después. En este caso, el código fuente limpio elimina el archivo.
  • No se garantiza que los archivos se limpien en cuanto cloudFiles.cleanSource.retentionDuration expire. Para mantener los costes bajos, Auto Loader limpia los archivos simultáneamente con el procesamiento de flujo y termina tan pronto como el procesamiento de flujo termina o se termina. Los archivos que eran candidatos para la limpieza, pero que no pudieron limpiarse durante el procesamiento del flujo, se recogen la siguiente vez que se ejecuta Auto Loader.

Notas sobre la fuente limpia

  • El código fuente limpio solo se ejecuta si hay un lote de archivos que procesar. No es un proceso en segundo plano que se ejecute independientemente de la ingestión. Si no hay archivos nuevos que ingerir en el directorio fuente, el código fuente limpio no se inicia para la ejecución actual del flujo. Como resultado, si un flujo deja de recibir nuevos archivos, los archivos que ya han superado su duración de retención no se limpian hasta que una secuencia posterior procesa un nuevo lote.

    Este requisito de lote se aplica independientemente de cloudFiles.cleanSource.waitForCompletion. Esa opción solo mantiene la transmisión viva el tiempo suficiente para terminar una limpieza en curso en una partida. No arranca la fuente limpia cuando no hay lote que procesar.

  • Si un archivo se ingiere en la secuencia N, el commit_time para el archivo se establece en la secuencia N+1. commit_time debe establecerse antes de que una fuente limpia pueda determinar si un archivo es elegible para mover o eliminar, de modo que lo más pronto que un archivo puede convertirse en candidato para limpieza es la ejecución del flujo N+2.

  • La configuración commit_time es necesaria pero no suficiente. Un archivo solo se limpia una vez que ha transcurrido su duración de retención, medida a partir de su commit_timearchivo . Por ejemplo, con el valor predeterminado cloudFiles.cleanSource.retentionDuration de 30 días, un archivo procesado hoy no es elegible para limpieza hasta 30 días después de haberlo commit_time configurado. Esto se cumple independientemente de cuántas corrientes de arroyo ocurran entre medias. Ambas condiciones deben cumplirse antes de que el archivo sea movido o eliminado.