FAQ sur Auto Loader
Trouvez des réponses aux questions fréquemment posées sur Databricks Auto Loader.
Auto Loader traite-t-il à nouveau le fichier lorsque le fichier est ajouté ou écrasé ?
Avec le réglage par default (cloudFiles.allowOverwrites = false), les fichiers sont traités une seule fois. Lorsqu'un fichier est ajouté ou écrasé, Auto Loader ne peut pas garantir quelle version de fichier sera traitée.
Pour permettre à Auto Loader de traiter le fichier à nouveau lorsqu'il est ajouté ou écrasé, vous pouvez définir cloudFiles.allowOverwrites sur true. Dans ce cas, Auto Loader est garanti de traiter la dernière version du fichier. Cependant, Auto Loader ne peut pas garantir quelle version intermédiaire est traitée.
Faites preuve de prudence si vous activez cloudFiles.allowOverwrites en mode de notification de fichier. En mode de notification de fichiers, Auto Loader pourrait identifier de nouveaux fichiers grâce aux notifications de fichiers et à la liste des répertoires. Étant donné que l'heure de l'événement de notification de fichier et l'heure de modification du fichier peuvent différer, Auto Loader pourrait recevoir deux Timestamps différents et ingérer le même fichier deux fois, même si le fichier n'a pas été mis à jour.
Avec cloudFiles.allowOverwrites activé, vous devez gérer vous-même les enregistrements en double. Auto Loader retraîtera le fichier entier même s'il est ajouté ou partiellement mis à jour. En général, Databricks recommande d'utiliser Auto Loader pour ingérer uniquement les fichiers immuables et d'utiliser le paramètre default cloudFiles.allowOverwrites = false. Si vous avez d'autres questions, contactez votre équipe de compte Databricks.
Comment Auto Loader détermine-t-il si un fichier a été ingéré ou non ?
Auto Loader ingère normalement chaque fichier une seule fois en fonction de son chemin de fichier. Cependant, si vous définissez l'option allowOverwrites sur true, Auto Loader utilise également le Timestamp de la dernière modification du fichier pour déterminer si un fichier est nouveau ou a été mis à jour et doit être réingéré. Consultez Auto Loader traite-t-il à nouveau le fichier lorsque celui-ci est ajouté ou écrasé ?
Si mes fichiers de données n'arrivent pas de manière continue, mais à intervalles réguliers, par exemple, une fois par jour, dois-je quand même utiliser cette source et y a-t-il des avantages ?
Dans ce cas, vous pouvez configurer un Trigger.AvailableNow (disponible dans Databricks Runtime 10.4 LTS et versions ultérieures) job Structured Streaming et le planifier pour qu'il s'exécute après l'heure d'arrivée prévue du fichier. Auto Loader fonctionne bien avec les mises à jour peu fréquentes ou fréquentes. Même si les mises à jour éventuelles sont très volumineuses, Auto Loader s'adapte bien à la taille des entrées. Les techniques efficaces de détection de fichiers et les capacités d'évolution des schémas d'Auto Loader en font la méthode recommandée pour l'ingestion incrémentielle de données.
Comment Auto Loader déduit-il le schéma ?
Lorsque le DataFrame est défini pour la première fois, Auto Loader répertorie votre répertoire source, choisit les 50 Go de données ou 1 000 fichiers les plus récents (par heure de modification du fichier) et les utilise pour inférer votre schéma de données.
Auto Loader déduit également les colonnes de partition en examinant la structure du répertoire source et recherche les chemins d’accès aux fichiers qui contiennent la structure /key=value/. Si le répertoire source a une structure incohérente, par exemple :
base/path/partition=1/date=2020-12-31/file1.json
// inconsistent because date and partition directories are in different orders
base/path/date=2020-12-31/partition=2/file2.json
// inconsistent because the date directory is missing
base/path/partition=3/file3.json
Auto Loader déduit les colonnes de partition comme étant vides. Utilisez cloudFiles.partitionColumns pour analyser explicitement les colonnes de la structure du répertoire.
Comment Auto Loader se comporte-t-il lorsque le dossier source est vide ?
Si le répertoire source est vide, Auto Loader vous demande de fournir un schéma car il n'y a pas de données pour effectuer l'inférence.
Quand Auto Loader infère-t-il le schéma ? Évolue-t-il automatiquement après chaque micro-batch ?
Le schéma est inféré lorsque le DataFrame est défini pour la première fois dans votre code. Lors de chaque micro-batch, les modifications de schéma sont évaluées à la volée ; par conséquent, vous n'avez pas à vous soucier des impacts sur les performances. Lorsque le Stream redémarre, il récupère le schéma évolué à partir de l'emplacement du schéma et start l'exécution sans aucune surcharge due à l'inférence.
Quel est l'impact sur les performances de l'ingestion des données lors de l'utilisation de l'inférence de schéma Auto Loader ?
Vous devez vous attendre à ce que l'inférence de schéma prenne quelques minutes pour les très grands répertoires source lors de l'inférence de schéma initiale. Vous ne devriez pas observer d'impacts significatifs sur les performances lors de l'exécution du stream. Si vous exécutez votre code dans un Notebook Databricks, vous pouvez voir les mises à jour de statut qui spécifient quand Auto Loader listera votre répertoire pour l'échantillonnage et l'inférence du schéma de vos données.
En raison d’un bogue, un mauvais fichier a radicalement modifié mon schéma. Que dois-je faire pour annuler la modification d’un schéma ?
Contactez le support Databricks pour obtenir de l'aide.
Que se passe-t-il si je change l'emplacement du point de contrôle lors du redémarrage du stream ?
Un emplacement de point de contrôle maintient des informations d'identification importantes d'un Stream. Modifier l'emplacement du point de contrôle signifie effectivement que vous avez abandonné le précédent Stream et démarré un nouveau Stream.
Dois-je créer des services de notification d'événements au préalable ?
Non. Si vous choisissez le mode de notification de fichier et que vous fournissez les autorisations requises, Auto Loader peut créer des services de notification de fichiers pour vous. Voir Gérer les files d'attente de notifications de fichiers pour chaque Stream Auto Loader séparément (classique).
Si les événements de fichiers sont activés sur l'emplacement externe dans Unity Catalog, le service d'événements de fichiers peut créer les événements de fichiers chez votre fournisseur cloud, et vous n'avez pas besoin de configurer Auto Loader pour les créer pour chaque Stream. Voir Utiliser le mode de notification de fichiers avec les événements de fichiers
Puis-je exécuter plusieurs requêtes en streaming à partir de différents répertoires d'entrée sur le même compartiment/conteneur ?
Oui, tant qu'il ne s'agit pas de répertoires parents-enfants ; par exemple, prod-logs/ et prod-logs/usage/ ne fonctionneraient pas car /usage est un répertoire enfant de /prod-logs.
Puis-je utiliser cette fonctionnalité lorsqu'il existe des notifications de fichiers sur mon compartiment ou mon conteneur ?
Oui, tant que votre répertoire d'entrée n'entre pas en conflit avec le préfixe de notification existant (par exemple, les répertoires parents-enfants ci-dessus).
Puis-je partager une file d'attente SQS entre Auto Loader et d'autres applications ?
Databricks ne recommande pas le partage d'une file d'attente SQS entre Auto Loader et d'autres applications. Au lieu de cela, transférez vos notifications d'événements S3 vers une rubrique SNS, puis abonnez une file d'attente SQS distincte pour chaque application à cette rubrique. Utilisez une politique de filtre d'abonnement SNS pour vous assurer que seuls les messages pertinents sont transférés à chaque file d'attente. Ensuite, fournissez la file d'attente dédiée à Auto Loader.
Comment confirmer que les événements de fichier sont configurés correctement ?
Cliquez sur le bouton **Tester la connexion** de la page de l'emplacement externe. Si vous avez correctement configuré les événements de fichier, vous verrez une coche verte pour l'élément **Lecture d'événements de fichier**. Si vous venez de créer l'emplacement externe et d'activer les événements de fichier en mode Automatic, le test affiche Skipped pendant que Databricks configure les notifications pour l'emplacement externe. Patientez quelques minutes, puis cliquez à nouveau sur **Tester la connexion**. Si Databricks ne dispose pas des autorisations requises pour configurer ou lire les événements de fichier, vous verrez une erreur pour l'élément **Lecture d'événements de fichier**.
Puis-je éviter une liste complète du répertoire lors de l'exécution initiale ?
N°. Même si includeExistingFiles est défini sur false, Auto Loader effectue une liste de répertoires pour découvrir les fichiers créés après le start du Stream et se mettre à jour avec le cache d'événements de fichier (sécuriser une position de lecture valide dans le cache et la stocker dans le point de contrôle du Stream).
Dois-je définir cloudFiles.backfillInterval pour éviter les fichiers manquants ?
Non. Databricks recommandait auparavant ce paramètre pour le mode de notification de fichiers classique, car les systèmes de notification du stockage cloud pouvaient entraîner des fichiers manqués ou arrivant en retard. Maintenant, Databricks effectue des listes complètes de répertoires sur l'emplacement externe. La première liste complète de répertoires commence dès que les événements de fichiers sont activés sur l'emplacement externe. Chaque liste ultérieure a lieu 24 heures après la dernière analyse complète tant qu'il y a au moins un Stream Auto Loader utilisant les événements de fichiers pour ingérer des données.
J'ai configuré les événements de fichier avec une file d'attente de stockage fournie, mais la file d'attente a été mal configurée et j'ai manqué des fichiers. Comment m'assurer qu'Auto Loader ingère les fichiers manquants lorsque ma file d'attente a été mal configurée ?
Vérifiez d'abord que la mauvaise configuration de la file d'attente fournie est corrigée. Pour vérifier, cliquez sur le bouton Tester la connexion sur la page de l'emplacement externe. Si vous configurez correctement les événements de fichier, une coche verte apparaît pour l'élément Événements de fichier lus .
Databricks réalise un listage complet des répertoires pour les emplacements externes où les événements de fichiers sont activés. Ce listage de répertoires découvre les fichiers qui ont été manqués pendant la période de mauvaise configuration et les stocke dans le cache des événements de fichiers.
Une fois la mauvaise configuration corrigée et Databricks a terminé la liste de répertoires, Auto Loader continue de lire à partir du cache des événements de fichiers et ingère automatiquement tous les fichiers manqués pendant la période de mauvaise configuration.
Comment puis-je récupérer d'une erreur CF_MANAGED_FILE_EVENTS_INVALID_CONTINUATION_TOKEN ?
Cette erreur se produit lorsque le jeton de continuation stocké dans le point de contrôle Auto Loader pour le service d'événements de fichiers est devenu invalide.
Quelques causes courantes :
cloudFiles.useManagedFileEventsa été désactivé puis réactivé.- Modification de l'emplacement externe ou du volume de la source.
- Modification de la file d'attente fournie.
- Modification des options
cloudFiles.allowOverwritesoucloudFiles.readChangeFeed.
Pour récupérer :
- Définissez
.option("cloudFiles.listOnStart", "true")et.option("cloudFiles.validateOptions", false)sur votre query de streaming. - Redémarrer le stream. Auto Loader effectue une liste complète du répertoire au start et ignore le jeton de continuation invalide.
- Après un micro-batch réussi, supprimez les deux options et redémarrez le stream.
Pour plus d'informations sur l'option cloudFiles.listOnStart, consultez la notification de fichier.
Comment nettoyer les ressources de notification d’événements créées par Auto Loader ?
Vous pouvez utiliser le gestionnaire de ressources cloud pour répertorier et détruire les ressources. Vous pouvez également supprimer ces ressources manuellement à l'aide de l’interface utilisateur du fournisseur cloud ou des APIs.
Comment surveiller mon pipeline Auto Loader ?
Auto Loader expose des métriques clés par le biais de StreamingQueryListener et l'état d'ingestion au niveau du fichier par le biais de cloud_files_state(). Pour obtenir des conseils sur le monitoring des métriques, l'interrogation de l'état d'ingestion, la création de tableaux de bord d'observabilité et le dépannage des problèmes courants, consultez Superviser et observer Auto Loader.