¿Qué es el modo de lista de directorios de Auto Loader?

Auto Loader usa el modo de lista de directorios de forma predeterminada. En el modo de lista de directorios, el cargador automático identifica los nuevos archivos enumerando el directorio de entrada. El modo de listado de directorios permite iniciar rápidamente los flujos del cargador automático sin ninguna configuración de permisos más que el acceso a los datos en el almacenamiento en la nube.

Para obtener el mejor rendimiento con el modo de lista de directorios, use Databricks Runtime 9.1 o una versión posterior. En este artículo se describe la funcionalidad predeterminada del modo de lista de directorios, así como las optimizaciones basadas en el orden léxico de los archivos.

¿Cómo funciona el modo de lista de directorios?

Azure Databricks ha optimizado el modo de lista de directorios para que Auto Loader detecte archivos en el almacenamiento en la nube de forma más eficaz que otras opciones de Apache Spark.

Por ejemplo, si tuviera archivos que se suben cada 5 minutos como /some/path/YYYY/MM/DD/HH/fileName, para encontrar todos los archivos en estos directorios, el origen de archivo Apache Spark enumeraría todos los subdirectorios en paralelo. El algoritmo siguiente calcula el número total de llamadas de directorio LIST de API al almacenamiento de objetos:

1 (directorio base) + 365 (por día) * 24 (por hora) = 8761 llamadas

Al recibir una respuesta plana del almacenamiento, el cargador automático reduce el número de llamadas API al número de archivos del almacenamiento dividido por el número de resultados devueltos por cada llamada API, lo que reduce considerablemente los costos en la nube. En la tabla siguiente se muestra el número de archivos devueltos por cada llamada de API para el almacenamiento de objetos común:

Resultados devueltos por llamada Almacenamiento de objetos
1000 S3
5000 ADLS Gen2
1024 GCS

Listado incremental (obsoleto)

Importante

Esta característica ha quedado en desuso. Databricks recomienda utilizar el modo de notificación de archivos en lugar del listado incremental.

Nota:

Disponible en Databricks Runtime 9.1 LTS y versiones superiores.

La Lista incremental está disponible para Azure Data Lake Storage Gen2 (abfss://), S3 (s3://) y GCS (gs://).

En el caso de los archivos generados lexicográficamente, el cargador automático aprovecha el orden léxico de los archivos y las API de lista optimizadas para mejorar la eficacia de la lista de directorios mediante la enumeración de los archivos ingeridos recientemente en lugar de mostrar el contenido de todo el directorio.

De manera predeterminada, el cargador automático detecta automáticamente si un directorio determinado es aplicable a la lista incremental comprobando y comparando las rutas de acceso de los directorios completados previamente. Para garantizar la integridad de los datos en el modo auto, el cargador automático desencadena automáticamente una lista completa de directorios después de completar 7 listas incrementales consecutivas. Puede controlar la frecuencia de las listas completas de directorios estableciendo cloudFiles.backfillInterval para desencadenar las reposiciones asincrónicas en un intervalo determinado.

Ordenación léxica de archivos

Para que los archivos se ordenen léxicamente, los nuevos archivos que se cargan deben tener un prefijo que sea lexicográficamente mayor que los archivos existentes. A continuación se muestran algunos ejemplos de directorios léxicos ordenados.

Archivos con versiones

Delta Lake realiza confirmaciones en los registros de transacciones de tabla en un orden léxico.

<path-to-table>/_delta_log/00000000000000000000.json
<path-to-table>/_delta_log/00000000000000000001.json <- guaranteed to be written after version 0
<path-to-table>/_delta_log/00000000000000000002.json <- guaranteed to be written after version 1
...

AWS DMS carga los archivos CDC en AWS S3 de forma versionada.

database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...

Archivos con particiones de fecha

Los archivos pueden cargarse en un formato particionado por fecha. A continuación se indican algunos ejemplos:

// <base-path>/yyyy/MM/dd/HH:mm:ss-randomString
<base-path>/2021/12/01/10:11:23-b1662ecd-e05e-4bb7-a125-ad81f6e859b4.json
<base-path>/2021/12/01/10:11:23-b9794cf3-3f60-4b8d-ae11-8ea320fad9d1.json
...

// <base-path>/year=yyyy/month=MM/day=dd/hour=HH/minute=mm/randomString
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/442463e5-f6fe-458a-8f69-a06aa970fc69.csv
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/8f00988b-46be-4112-808d-6a35aead0d44.csv <- this may be uploaded before the file above as long as processing happens less frequently than a minute

Cuando los archivos se cargan con particiones de fecha, se deben tener en cuenta algunos aspectos:

  • Los meses, los días, las horas y los minutos se deben dejar con ceros para garantizar el orden léxico (debe cargarse como hour=03 en lugar dehour=3 o como 2021/05/03 en lugar de 2021/5/3).
  • Los archivos no tienen que cargarse necesariamente en orden léxico en el directorio más profundo, siempre y cuando el procesamiento se produzca con menor frecuencia que la granularidad temporal del directorio primario.

Algunos servicios que pueden cargar archivos en una ordenación léxica con particiones de fecha son:

Cambio de la ruta de acceso de origen de Auto Loader

En Databricks Runtime 11.3 LTS y versiones posteriores, es posible cambiar la ruta de acceso de entrada del directorio para el cargador automático configurado con el modo de lista de directorios sin tener que elegir un nuevo directorio de punto de control.

Advertencia

Esta funcionalidad no se admite para el modo de notificación de archivos. Si se utiliza el modo de notificación de archivos y se cambia la ruta, puede fallar la ingesta de archivos que ya estén presentes en el nuevo directorio en el momento de la actualización del directorio.

Por ejemplo, si desea ejecutar un trabajo de ingesta diaria que cargue todos los datos de una estructura de directorios organizada por días, como /YYYYMMDD/, podría usar el mismo punto de control para realizar un seguimiento de la información de estado de ingesta en un directorio de origen diferente cada día, al tiempo que mantiene la información de estado de los archivos ingeridos de todos los directorios de origen usados anteriormente.