Aller au contenu principal

Élagage dynamique des fichiers

Lorsqu'une query effectue une jointure entre une grande table Delta Lake et une table plus petite filtrée, les valeurs du filtre ne sont pas connues avant l'exécution de la query. Sans élagage à l’exécution, la query analyse chaque fichier de la grande table, même les fichiers qui ne contiennent aucune ligne correspondante. L’élagage dynamique des fichiers résout ce problème. Au moment de l'exécution, l'optimiseur pousse les résultats du filtre d'un côté de la jointure jusqu'à l'analyse de la table Delta Lake et ignore les fichiers qui ne peuvent pas contenir de lignes correspondantes.

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

Quand l'élagage dynamique des fichiers s'applique​

L'élagage dynamique des fichiers s'applique uniquement aux jointures sur les tables Delta Lake. Dans une instruction MERGE, elle utilise les valeurs de clé de jointure de la source pour ignorer les fichiers cibles lorsque la condition de Merge compare une colonne source avec une colonne cible pour l’égalité. Dans les instructions UPDATE 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 compute avec Photon. Pour les instructions SELECT, Photon dispose d'un élagage dynamique des fichiers plus large et plus fiable. Sans Photon, l'élagage dynamique des fichiers pourrait toujours s'appliquer aux instructions SELECT, en fonction de la forme de la query et du plan d'exécution. Consultez Qu'est-ce que Photon ?.

L’élagage dynamique de fichiers améliore les performances principalement pour les tables non partitionnées et pour les jointures sur des colonnes non partitionnées. Par default, il ne se Trigger que lorsque la grande table Delta Lake de la jointure fait au moins 10 Go et contient au moins 10 fichiers. Voir Configuration.

L’élagage dynamique des fichiers réduit également les conflits d'écriture. Lorsque Delta Lake recherche des conflits lors d'un commit, il examine les fichiers que l'élagage dynamique des fichiers a ignorés. Cela réduit le nombre de transactions échoué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 façon dont les données sont regroupées. Si les valeurs sur lesquelles vous effectuez la jointure sont réparties dans chaque fichier, l’élagage dynamique des fichiers ignore peu de fichiers. Pour aider l’élagage dynamique des fichiers à ignorer davantage de fichiers, suivez ces pratiques :

  • Utilisez le clustering liquide sur les colonnes que vous utilisez fréquemment dans vos jointures pour que les lignes correspondantes soient colocalisées dans moins de fichiers.
  • Utilisez le compute activé par Photon, que les instructions MERGE, UPDATE et DELETE exigent pour l'élagage dynamique des fichiers.

Configuration​

La plupart des charges de travail n'ont pas besoin de modifier ces paramètres. Envisagez d'ajuster les thresholds si une jointure avec une table Delta Lake plus petite bénéficierait d'un élagage mais tombe en dessous de la taille default ou du threshold de nombre de fichiers.

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

Propriété

Type

Par défaut

Description

spark.databricks.optimizer.dynamicFilePruning

Boolean

true

Active ou désactive l'élagage dynamique des fichiers.

spark.databricks.optimizer.deltaTableSizeThreshold

Long

10000000000 (10 Go)

Taille minimale, en octets, de la grande table Delta Lake dans la jointure qui Trigger l'élagage dynamique des fichiers. Pour une table plus petite, le scan de la totalité de la table est généralement plus économique que l'application des filtres.

Pour connaître 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

Nombre minimal de fichiers dans la grande table Delta Lake de la jointure qui déclenche l'élagage dynamique des fichiers. Si la table a moins de fichiers que ce threshold, l'élagage dynamique des fichiers ne s'exécute pas, car il pourrait ne pas être rentable pour une table avec seulement quelques fichiers.

Pour déterminer le nombre de fichiers dans une table Delta Lake, exécutez DESCRIBE DETAIL table_name et vérifiez la colonne numFiles.

Propriété

Type

Par défaut

Description

spark.databricks.optimizer.dynamicFilePruning

Boolean

true

Active ou désactive l'élagage dynamique des fichiers.

spark.databricks.optimizer.deltaTableSizeThreshold

Long

10000000000 (10 Go)

Taille minimale, en octets, de la grande table Delta Lake dans la jointure qui Trigger l'élagage dynamique des fichiers. Pour une table plus petite, le scan de la totalité de la table est généralement plus économique que l'application des filtres.

Pour connaître 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

Nombre minimal de fichiers dans la grande table Delta Lake de la jointure qui déclenche l'élagage dynamique des fichiers. Si la table a moins de fichiers que ce threshold, l'élagage dynamique des fichiers ne s'exécute pas, car il pourrait ne pas être rentable pour une table avec seulement quelques fichiers.

Pour déterminer le nombre de fichiers dans une table Delta Lake, exécutez DESCRIBE DETAIL table_name et vérifiez la colonne numFiles.