Qu’est-ce que le mode de liste de répertoire du chargeur automatique ?

Auto Loader utilise le mode de liste de répertoires par défaut. Dans le mode Liste de répertoires, Auto Loader identifie les nouveaux fichiers en listant le répertoire d’entrée. Le mode Liste de répertoires vous permet de démarrer rapidement les flux Auto Loader sans aucune configuration d’autorisation autre que l’accès à vos données sur le stockage cloud.

Pour des performances optimales avec le mode de liste de répertoires, utilisez Databricks Runtime 9.1 ou version ultérieure. Cet article décrit les fonctionnalités par défaut du mode de liste de répertoires ainsi que les optimisations basées sur l’ordre lexical des fichiers.

Comment fonctionne le mode Liste de répertoires ?

Azure Databricks a optimisé le mode de liste de répertoires pour Auto Loader afin de découvrir les fichiers dans le stockage cloud plus efficacement que d’autres options Apache Spark.

Par exemple, si des fichiers sont chargés toutes les 5 minutes sous /some/path/YYYY/MM/DD/HH/fileName, pour rechercher tous les fichiers dans ces répertoires, la source de fichiers Apache Spark liste tous les sous-répertoires en parallèle. L’algorithme suivant estime le nombre total d’appels de l’API LIST pour les répertoires dans le stockage d’objets :

1 (répertoire de base) + 365 (par jour) * 24 (par heure) = 8761 appels

En recevant une réponse aplatie du stockage, Auto Loader réduit le nombre d’appels d’API au nombre de fichiers dans le stockage divisé par le nombre de résultats renvoyés par chaque appel d’API, réduisant ainsi considérablement les coûts de votre cloud. Le tableau suivant indique le nombre de fichiers retournés par chaque appel d’API pour le stockage d’objets courant :

Résultats retournés par appel Stockage d’objets
1 000 S3
5 000 ADLS Gen2
1 024 GCS

Liste incrémentielle (déconseillée)

Important

Cette fonctionnalité est déconseillée. Databricks recommande d’utiliser le mode de notification de fichier au lieu d’une liste incrémentielle.

Remarque

Disponible dans Databricks Runtime 9.1 LTS et ultérieur.

La liste incrémentielle est disponible pour Azure Data Lake Storage Gen2 (abfss://), S3 (s3://) et GCS (gs://).

Pour les fichiers générés de manière lexicographique, Auto Loader exploite les API de classement lexical des fichiers et d’optimisation de liste pour améliorer l’efficacité de la liste de répertoires en répertoriant les fichiers récemment ingérés au lieu de répertorier le contenu de l’ensemble du répertoire.

Par défaut, Auto Loader détecte automatiquement si un répertoire donné s’applique à la liste incrémentielle en vérifiant et en comparant les chemins d’accès des fichiers des listes de répertoires précédemment terminées. Pour garantir l’exhaustivité des données en mode auto, Auto Loader déclenche automatiquement une liste de répertoires complète après avoir terminé 7 listes incrémentielles consécutives. Vous pouvez contrôler la fréquence des listes de répertoires complètes en définissant cloudFiles.backfillInterval pour déclencher des renvois asynchrones à un intervalle donné.

Ordre lexical des fichiers

Pour que les fichiers soient ordonnés lexicalement, les nouveaux fichiers qui sont chargés doivent avoir un préfixe supérieur d’un point de vue lexicographique à celui des fichiers existants. Voici quelques exemples de répertoires ordonnés lexicalement.

Fichiers classés par version

Delta Lake effectue des validations dans les journaux des transactions de table dans un ordre lexical.

<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 charge des fichiers CDC sur AWS S3 selon leur version.

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

Fichiers partitionnés par date

Les fichiers peuvent être chargés dans un format de partitionnement par date. Quelques exemples :

// <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

Lorsque les fichiers sont chargés avec le partitionnement par date, voici quelques éléments à garder à l’esprit :

  • Les mois, les jours, les heures et les minutes doivent être laissés remplis de zéros pour garantir l’ordre lexical (doivent être chargés sous la forme hour=03 au lieu de hour=3 ou sous la forme 2021/05/03 au lieu de 2021/5/3).
  • Les fichiers ne doivent pas nécessairement être chargés dans l’ordre lexical dans le répertoire le plus profond, tant que le traitement est moins fréquent que la granularité temporelle du répertoire parent.

Voici quelques-uns des services qui peuvent charger des fichiers dans un ordre lexical partitionné par date :

Modifier le chemin d’accès source pour le chargeur automatique

Dans Databricks Runtime 11.3 LTS et les versions ultérieures, vous pouvez modifier le chemin d’entrée du répertoire pour Auto Loader, configuré avec le mode de liste de répertoires, sans avoir à choisir un nouveau répertoire du point de contrôle.

Avertissement

Cette fonctionnalité n’est pas prise en charge pour le mode de notification de fichier. Si le mode de notification de fichier est utilisé et que le chemin d’accès a été modifié, vous risquez de ne pas ingérer les fichiers qui sont déjà présents dans le nouveau répertoire lors de sa mise à jour.

Si vous souhaitez par exemple exécuter un travail d’ingestion quotidien qui charge toutes les données depuis une structure de répertoires organisée, comme /YYYYMMDD/, vous pouvez utiliser le même point de contrôle pour suivre les informations d’état de l’ingestion dans un répertoire source différent chaque jour, tout en conservant les informations d’état pour les fichiers ingérés à partir de tous les répertoires sources précédemment utilisés.