Partager via


Optimiser la disposition des fichiers de données

L’optimisation prédictive exécute automatiquement OPTIMIZE sur les tables managées par Unity Catalog. Databricks recommande d’activer l’optimisation prédictive pour toutes les tables managées par Unity Catalog afin de simplifier la maintenance des données et de réduire les coûts de stockage. Consultez Optimisation prédictive pour les tables managées Unity Catalog.

La commande OPTIMIZE réécrit les fichiers de données afin d’améliorer la disposition des données pour les tables Delta. Pour les tables avec clustering liquide activé, OPTIMIZE réécrit les fichiers de données afin de regrouper les données par clé de clustering liquide. Pour les tables avec des partitions définies, le compactage de fichiers et la disposition des données sont effectués dans les partitions.

Les tables sans clustering liquide peuvent éventuellement inclure une clause ZORDER BY pour améliorer le clustering de données lors de la réécriture. Databricks recommande d’utiliser le clustering liquide plutôt que des partitions, ZORDER, ou d’autres approches de disposition des données.

Consultez OPTIMIZE.

Exemples de syntaxe

Vous déclenchez un compactage en exécutant la commande OPTIMIZE :

SQL

OPTIMIZE table_name

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

Si vous disposez d’une grande quantité de données et que vous souhaitez uniquement en optimiser un sous-ensemble, vous pouvez spécifier un prédicat de partition facultatif à l’aide de WHERE :

SQL

OPTIMIZE table_name WHERE date >= '2022-11-18'

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Notes

  • L’optimisation de l’empaquetage bin est idempotent, ce qui signifie que si elle est exécutée deux fois sur le même jeu de données, la deuxième exécution n’a aucun effet.
  • L’empaquetage bin a pour but de produire des fichiers de données uniformément équilibrés en ce qui concerne leur taille sur le disque, mais pas nécessairement le nombre de tuples par fichier. Toutefois, les deux mesures sont le plus souvent corrélées.
  • Les API Python et Scala permettant l’exécution de l’opération OPTIMIZE sont disponibles à partir de Databricks Runtime 11.3 LTS et versions ultérieures.

Les lecteurs de tables delta utilisent l’isolement d’instantané, ce qui signifie qu’ils ne sont pas interrompus lorsque OPTIMIZE supprime les fichiers inutiles du journal des transactions. OPTIMIZE n’apporte aucune modification de données à la table, de sorte qu’une lecture avant et après OPTIMIZE a les mêmes résultats. L’exécution de OPTIMIZE sur une table qui est une source de streaming n’affecte pas les flux actuels ou futurs qui traitent cette table comme une source. OPTIMIZE retourne les statistiques de fichier (min, Max, total, etc.) pour les fichiers supprimés et les fichiers ajoutés par l’opération. L’optimisation des statistiques contient également les statistiques d’ordre de plan, le nombre de lots et les partitions optimisées.

Vous pouvez également compacter automatiquement des fichiers de petite taille à l’aide de la compaction automatique. Consultez Compactage automatique pour Delta Lake sur Azure Databricks.

À quelle fréquence exécuter OPTIMIZE ?

Activez l’optimisation prédictive pour les tables managées par Unity Catalog afin de vous assurer que OPTIMIZE s’exécute automatiquement lorsque cela est rentable.

Lorsque vous choisissez la fréquence d’exécution OPTIMIZE , il existe un compromis entre les performances et les coûts. Pour de meilleures performances de requête de l’utilisateur final, exécutez OPTIMIZE plus souvent. Cela entraîne un coût plus élevé en raison de l’augmentation de l’utilisation des ressources. Pour optimiser les coûts, exécutez-le moins souvent.

Databricks vous recommande de commencer par exécuter OPTIMIZE quotidiennement, puis d’ajuster la fréquence pour trouver un compromis entre les coûts et les performances.

Quel est le meilleur type d’instance pour exécuter OPTIMIZE (compression bin et ordre de plan) ?

Les deux opérations sont des opérations gourmandes en ressources processeur qui effectuent de grandes quantités de décodage et d’encodage parquet.

Databricks recommande les types d’instance optimisés pour le calcul. OPTIMIZE bénéficie également des disques SSD attachés.