Élagage de fichiers dynamiques

Lorsqu’une requête relie une grande table Delta Lake à une table plus petite et filtrée, les valeurs de filtre ne sont connues qu’une fois la requête lancée. Sans élagage à l’exécution, la requête scanne chaque fichier de la grande table, même ceux qui ne contiennent pas de lignes correspondantes. L’élagage dynamique des fichiers résout ce problème. À l’exécution, l’optimiseur pousse les résultats du filtre d’un côté de la jointure jusqu’à la lecture de la table Delta Lake et saute les fichiers qui ne peuvent pas contenir les lignes correspondantes.

L’élagage dynamique des fichiers est activé par défaut. Vous n’avez pas besoin de modifier vos requêtes pour en bénéficier.

Lorsque l’élagage dynamique des fichiers s’applique

L’élagage dynamique des fichiers ne s’applique qu’aux jointures sur les tables Delta Lake. Dans une MERGE instruction SQL, il utilise les valeurs de la clé de jointure de la source pour ignorer les fichiers cibles lorsque la condition de fusion compare une colonne source à une colonne cible pour l’égalité. Dans UPDATE les instructions et DELETE , elle s’applique lorsque la condition contient une sous-requête qui effectue le même type de comparaison.

L’élagage dynamique des fichiers dans les instructions MERGE, UPDATE et DELETE nécessite un calcul compatible avec Photon. Pour les SELECT requêtes, Photon propose un élagage dynamique des fichiers plus étendu et plus fiable. Sans Photon, l’élagage dynamique des fichiers pourrait toujours s’appliquer aux instructions SELECT, selon la forme de la requête et le plan d’exécution. Consultez Qu’est-ce que Photon ?.

L’élagage dynamique des fichiers améliore les performances surtout pour les tables non partitionnées et pour les jointures sur des colonnes non partitionnées. Par défaut, il ne se déclenche que lorsque la grande table Delta Lake dans la jointure fait au moins 10 Go et contient au moins 10 fichiers. Consultez Configuration.

L’élagage dynamique des fichiers réduit également les conflits d’écriture. Lorsque Delta Lake vérifie les conflits lors d’un commit, il prend en compte les fichiers que l’élagage dynamique des fichiers a ignorés. Cela réduit le nombre de transactions ratées. Voir niveaux d’isolation et conflits d’écriture.

Bonnes pratiques

L’effet de performance de l’élagage dynamique des fichiers est corrélé à la manière dont les données sont regroupées. Si les valeurs utilisées pour la jointure sont réparties sur chaque fichier, l’élagage dynamique des fichiers ignore peu de fichiers. Pour permettre à l’élagage dynamique des fichiers d’ignorer davantage de fichiers, suivez ces pratiques :

  • Utilisez clustering liquide sur les colonnes que vous utilisez fréquemment dans des jointures, afin que les lignes correspondantes soient co-localisées dans moins de fichiers.
  • Utilisez le calcul compatible avec Photon, dont les instructions MERGE, UPDATE et DELETE ont besoin pour l’élagage dynamique des fichiers.

Configuration

La plupart des charges de travail n’ont pas besoin de modifier ces réglages. Envisagez d’ajuster les seuils si une jonction contre une table Delta Lake plus petite bénéficierait de l’élagage mais tombe en dessous du seuil par défaut de taille ou de nombre de fichiers.

Ces propriétés de configuration Apache Spark contrôlent l’élagage dynamique des fichiers :

Property Type Default Description
spark.databricks.optimizer.dynamicFilePruning Boolean true Ça active ou désactive l’élagage dynamique des fichiers.
spark.databricks.optimizer.deltaTableSizeThreshold Long 10000000000 (10 Go) La taille minimale, en octets, de la grande table Delta Lake dans la jointure qui déclenche l’élagage dynamique des fichiers. Pour une table plus petite, scanner toute la table est généralement moins cher que de pousser les filtres vers le bas.
Pour trouver la taille d’une table Delta Lake, exécutez DESCRIBE DETAIL table_name et vérifiez la colonne sizeInBytes.
spark.databricks.optimizer.deltaTableFilesThreshold Integer 10 Le nombre minimal de fichiers dans la grande table Delta Lake participant à la jointure qui déclenche l’élagage dynamique des fichiers. Si la table contient moins de fichiers que ce seuil, l’élagage dynamique des fichiers ne s’exécute pas, car cela peut ne pas être utile pour une table avec seulement quelques fichiers.
Pour trouver le nombre de fichiers dans une table Delta Lake, exécutez DESCRIBE DETAIL table_name et vérifiez la colonne numFiles.