Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un index de filtre Bloom est une structure de données économe en espace qui permet d’effectuer un saut de données sur des colonnes sélectionnées. Il est particulièrement efficace pour les colonnes avec de nombreuses valeurs distinctes, telles que du texte de forme libre ou des ID.
Limitations des index de filtre Bloom
Important
Azure Databricks ne recommande pas d’utiliser les index de filtre Bloom pour la plupart des charges de travail.
Bien que les index de filtre Bloom permettent d'ignorer les données sur les colonnes ayant une cardinalité élevée de valeurs uniques, ils introduisent souvent des problèmes tels que les suivants :
- Ils indexent uniquement les fichiers écrits après la création de l’index. Les index ne s’appliquent pas aux fichiers existants.
- Ils sont difficiles à régler et ajoutent souvent de la surcharge sans avantage significatif sur les performances.
- Ils fonctionnent mieux avec des filtres d’égalité hautement sélectifs sur une seule colonne. Ils offrent peu à aucun avantage pour les filtres plus larges.
- Les index de filtre Bloom fonctionnent uniquement sur des colonnes définies explicitement. Si vos requêtes commencent à filtrer sur des colonnes qui ne chevauchent pas les colonnes de l'index de filtre Bloom, vous devez supprimer l’index et le recréer manuellement, en ajoutant ainsi une charge opérationnelle supplémentaire. Vous devez également reconstruire le nouvel index à partir de zéro avec les nouvelles données.
Alors que les index de filtre Bloom visent à ignorer les lectures de fichiers, Azure Databricks doit toujours analyser le fichier d’index pour chaque fichier de données. Le classement Z et le clustering liquide sont plus efficaces, car ils permettent au moteur d’éviter d’envisager la plupart des fichiers.
Alternatives recommandées
Azure Databricks recommande d’utiliser les fonctionnalités suivantes au lieu d’index de filtre Bloom :
- E/S prédictives : sur les calculs activés par Photon avec Databricks Runtime 12.2 et versions ultérieures, les E/S prédictives réalisent un saut de fichier sur toutes les colonnes à l’aide d’heuristiques avancées. Il subsume entièrement les index de filtre Bloom, ce qui ajoute uniquement une surcharge d’écriture lorsque Photon est activé.
- Clustering liquide Dans Databricks Runtime 13.3 et versions ultérieures, le clustering liquide améliore l'optimisation de la lecture des données en organisant les données en fonction des colonnes fréquemment filtrées. Il fonctionne à une granularité plus grossière que les index de filtre Bloom et permet à Azure Databricks d’ignorer des groupes entiers de fichiers pendant la planification des requêtes.
Important
Évitez de combiner des index de filtre Bloom avec des E/S prédictives. Lorsque les deux sont activés, les index de filtre Bloom sont prioritaires et désactivent les E/S prédictives, ce qui offre des performances plus rapides et plus fiables.
Fonctionnement des index de filtre Bloom
Les index de filtre Bloom Azure Databricks se composent d’un index de saut de données pour chaque fichier de données. L’index de filtre Bloom peut être utilisé pour déterminer qu’une valeur de colonne est définitivement pas dans le fichier, ou qu’elle est probablement dans le fichier. Avant de lire un fichier Azure Databricks vérifie le fichier d’index et le fichier est lu uniquement si l’index indique que le fichier peut correspondre à un filtre de données.
Les index de filtre Bloom prennent en charge les colonnes avec les types de données d’entrée suivants : byte, , shortint, long, float, , double, date, timestampet string. Les valeurs Null ne sont pas ajoutées à l’index de filtre Bloom. Par conséquent, tout filtre associé à Null nécessite la lecture du fichier de données. Azure Databricks prend en charge les filtres de source de données suivants : and, or, in, equalset equalsnullsafe. Les index de filtre Bloom ne sont pas pris en charge sur les colonnes imbriquées.
Configuration et référence
Utilisez la syntaxe suivante pour activer un filtre Bloom :
CREATE BLOOMFILTER INDEX
ON TABLE table_name
FOR COLUMNS(column_name OPTIONS (fpp=0.1, numItems=5000))
Pour plus d’informations sur la syntaxe, consultez CREATE BLOOM FILTER INDEX et DROP BLOOM FILTER INDEX.
Pour désactiver les opérations de filtre Bloom, définissez la configuration du niveau de session spark.databricks.io.skipping.bloomFilter.enabled sur false.
Afficher la liste des index de filtre Bloom
Pour afficher la liste des index, exécutez :
spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))
Par exemple: