OPTIMIZE

S’applique à :check marked yes Databricks SQL check marked yes Databricks Runtime

Optimise la disposition des données Delta Lake. Optimisez éventuellement un sous-ensemble de données ou colocalisez les données par colonne. Si vous ne spécifiez pas de colocation et que la table n’est pas définie avec le clustering liquide, une optimisation de type bin-packing est effectuée.

Syntaxe

OPTIMIZE table_name [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

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. Il 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.
  • L’ordre de plan n’est pas idempotent, mais il vise à être une opération incrémentielle. Le temps nécessaire pour l’ordre de plan n’est pas garanti pour une réduction sur plusieurs exécutions. Toutefois, si aucune nouvelle donnée n’a été ajoutée à une partition uniquement triée en Z, un autre ordre de plan de cette partition n’aura aucun effet. Il a pour but de produire des fichiers de données uniformément équilibrés en ce qui concerne le nombre de tuples, mais pas nécessairement la taille des données sur le disque. Les deux mesures sont le plus souvent corrélées, mais il peut y avoir des situations où cela n’est pas le cas, ce qui se traduit par un décalage dans l’optimisation des temps de tâche.

Notes

Lors de l’utilisation de Databricks Runtime, pour contrôler la taille du fichier de sortie, définissez la configuration Sparkspark.databricks.delta.optimize.maxFileSize. La valeur par défaut est 1073741824 , qui définit la taille sur 1 Go. La spécification de la valeur 104857600 définit la taille du fichier sur 100 Mo.

Paramètres

  • table_name

    Identifie une table Delta existante. Le nom ne doit pas inclure une spécification temporelle.

  • WHERE

    Optimisez le sous-ensemble de lignes correspondant au prédicat de partition donné. Seuls les filtres impliquant des attributs de clé de partition sont pris en charge.

    Vous ne pouvez pas utiliser cette clause sur les tables qui utilisent le clustering liquide.

  • ZORDER BY

    Colocalise les informations de colonne dans le même ensemble de fichiers. Cette colocalisation est utilisée par les algorithmes ignorés Delta Lake pour réduire considérablement la quantité de données qui doit être lue. Vous pouvez spécifier plusieurs colonnes pour ZORDER BY sous la forme d’une liste séparée par des virgules. Toutefois, l’efficacité de la localité diminue avec chaque colonne supplémentaire.

    Vous ne pouvez pas utiliser cette clause sur les tables qui utilisent le clustering liquide.

Exemples

> OPTIMIZE events;

> OPTIMIZE events WHERE date >= '2017-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

Pour plus d’informations sur la commande OPTIMIZE, consultez Compacter des fichiers de données avec optimize sur Delta Lake.