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.
S’applique à :
Databricks SQL
Databricks Runtime
Cette page décrit la OPTIMIZE commande, qui optimise la disposition des données Delta Lake. Vous pouvez optimiser un sous-ensemble de données ou colocaliser des données par colonne. Si vous ne spécifiez pas de colocation et que la table n’utilise pas le clustering liquide, Delta Lake effectue l’optimisation de l’empaquetage des compartiments.
Syntaxe
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Remarque
L’optimisation de l’empaquetage bin est idempotente : si vous l’exécutez deux fois sur le même jeu de données, la deuxième exécution n’a aucun effet. Il produit 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. Les deux mesures sont souvent corrélées.
Z-Ordering n’est pas idempotent, mais fonctionne de façon incrémentielle. Le temps que prend Z-Ordering n’est pas garanti pour diminuer sur plusieurs exécutions. Toutefois, si aucune nouvelle donnée n’a été ajoutée à une partition qui n’était que Z-Ordering, l’exécution de Z-Ordering sur cette partition n’a aucun effet. Z-Ordering produit des fichiers de données équilibrés uniformément par rapport au nombre de tuples, mais pas nécessairement à la taille des données sur le disque. Les deux mesures sont souvent corrélées, mais l’asymétrie dans les heures d’optimisation des tâches peut se produire lorsqu’elles diffèrent.
Remarque
Lorsque vous utilisez Databricks Runtime, pour contrôler la taille du fichier de sortie, définissez la configurationspark.databricks.delta.optimize.maxFileSize Spark. La valeur par défaut est 1073741824 (1 Go). La spécification de 104857600 la taille du fichier est de 100 Mo.
Paramètres
-
Identifie une table Delta existante. Le nom ne doit pas inclure une spécification temporelle ou une spécification d’options.
FULLS’applique à :
Databricks Runtime 16.0 et versions ultérieuresRéécrit tous les fichiers de données de la table. Utiliser
OPTIMIZE table_name FULLpour :- Optimisez l’ensemble de la table, y compris les données précédemment en cluster (pour les tables utilisant le clustering liquide).
- Recompressez les fichiers de données existants lorsque vous modifiez le codec de compression de la table à l’aide de la
delta.parquet.compression.codecpropriété.
Pour recomprimer les données existantes après avoir modifié le codec de compression, exécutez
OPTIMIZE table_name FULL:-- Change compression codec ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD'); -- Recompress all existing data files OPTIMIZE table_name FULL;Pour optimiser un sous-ensemble de fichiers d’une table avec clustering liquide activé, combinez-le
FULLavec unWHEREprédicat (Databricks Runtime 18.1 et versions ultérieures). Seuls les prédicats de plage simples sur une seule colonne de clustering sont pris en charge. Un fichier est inclus si une partie de sa plage se chevauche avec le prédicat. Par exemple,OPTIMIZE events FULL WHERE date > 15inclut un fichier avec une plage(col_min = 10, col_max = 20), car la plage du fichier chevauche le prédicat.WHEREOptimise le sous-ensemble de lignes correspondant à un prédicat partition/clustering. Seuls les filtres sur les attributs de clé de partition/clustering sont pris en charge.
Pour les tables qui utilisent le clustering liquide, utilisez
OPTIMIZE table_name FULL WHERE predicateplutôt (Databricks Runtime 18.1 et versions ultérieures).ZORDER BYRemarque
Databricks recommande un clustering liquide pour toutes les nouvelles tables au lieu de L’ordre Z. Consultez Utilisation de Liquid Clustering pour les tables.
Colocalise les informations de colonne dans le même ensemble de fichiers. Les algorithmes d’skipping de données Delta Lake utilisent la colocalisation pour réduire la quantité de données à lire. Vous pouvez spécifier plusieurs colonnes en tant que liste séparées par des virgules, mais l’efficacité de la colocalité 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 FULL;
> -- Partitioned table
> OPTIMIZE events WHERE date >= '2017-01-01';
> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Pour plus d’informations, consultez Optimiser la disposition des fichiers de données.