Contrôler la taille du fichier de données
Les recommandations de réglage manuel ne s'appliquent pas aux tables gérées par Unity Catalog, qui utilisent le réglage automatique de la taille des fichiers. Pour les nouvelles tables, utilisez les tables gérées par Unity Catalog avec les paramètres default.
Dans Databricks Runtime 13.3 LTS et versions ultérieures, Databricks recommande l'utilisation du clustering pour la Layout des tables. Voir Utiliser le clustering liquide pour les tables.
Databricks recommande d'utiliser l'optimisation prédictive pour exécuter automatiquement OPTIMIZE et VACUUM pour les tables. Consultez Optimisation prédictive pour les tables gérées par Unity Catalog.
Le compactage automatique et les écritures optimisées sont toujours activés pour les opérations MERGE, UPDATE et DELETE. Vous ne pouvez pas désactiver cette fonctionnalité.
Databricks ajuste automatiquement les tailles de fichiers pour les tables gérées par Unity Catalog. Pour les tables externes et les charges de travail existantes, vous pouvez configurer le compactage automatique, les écritures optimisées et les tailles de fichiers cibles afin de contrôler la manière dont les données sont écrites et compactées.
Pour les tables gérées par Unity Catalog, Databricks ajuste automatiquement la plupart des configurations si vous utilisez un SQL Warehouse ou Databricks Runtime 11.3 LTS ou supérieur.
Si vous mettez à niveau une charge de travail depuis Databricks Runtime 10.4 LTS ou une version antérieure, consultez Mettre à niveau vers la compactation automatique en arrière-plan.
Quand exécuter OPTIMIZE
Le compactage automatique et les écritures optimisées réduisent chacun les problèmes de petits fichiers, mais ne remplacent pas entièrement OPTIMIZE. Pour les tables de plus de 1 To, Databricks vous recommande d'exécuter OPTIMIZE selon une planification afin de consolider davantage les fichiers. Databricks recommande le clustering liquide pour un saut de données amélioré. Lorsque le clustering liquide est activé, OPTIMIZE réorganise automatiquement les données par les clés de clustering. Consultez l'utilisation du clustering liquide pour les tables.
Pour les tables gérées du Unity Catalog, l' optimisation prédictive exécute automatiquement OPTIMIZE sur les tables avec l'optimisation prédictive activée.
Optimisation automatique
L'optimisation automatique décrit les paramètres autoOptimize.autoCompact et autoOptimize.optimizeWrite. Consultez Compaction automatique et Écritures optimisées.
Compactage automatique
La compaction automatique combine les petits fichiers au sein des partitions de table pour réduire les problèmes liés aux petits fichiers. Il s'exécute de manière synchrone sur le cluster qui effectue l'écriture, après la réussite de l'écriture, et ne compacte que les fichiers qui n'ont pas été compactés auparavant.
Le compactage automatique et l'optimisation prédictive sont des fonctionnalités indépendantes qui peuvent être utilisées séparément ou ensemble. La compaction automatique s'exécute sur le cluster qui effectue l'écriture, tandis que l'optimisation prédictive exécute les opérations de maintenance de manière asynchrone à l'aide de compute serverless.
Utilisez les paramètres suivants pour configurer le compactage automatique :
Paramètre | Delta | Iceberg | Description |
|---|---|---|---|
Activer le compactage automatique (propriété de table) |
|
| Active la compaction automatique au niveau de la table. |
Activer le compactage automatique (session Spark) |
|
| Active le compactage automatique au niveau de la session. |
Taille maximale du fichier de sortie |
|
| Contrôle la taille du fichier de sortie cible. |
Fichiers minimum pour Trigger la compaction |
|
| Définit le nombre minimal de petits fichiers requis dans une partition ou une table pour Trigger le compactage automatique. |
Ces paramètres acceptent les options suivantes :
Options | Comportement |
|---|---|
| Ajuste la taille cible des fichiers tout en respectant les autres fonctionnalités d'auto-ajustement. |
| Alias de |
| Utilisez 128 Mo comme taille de fichier cible. Pas de dimensionnement dynamique. |
| Désactive le compactage automatique. Peut être défini au niveau de la session pour remplacer le compactage automatique pour toutes les tables modifiées dans la charge de travail. |
Databricks vous recommande d’utiliser le réglage automatique pour contrôler la taille des fichiers de sortie en fonction de la taille de la table. Voir Ajustement automatique de la taille des fichiers basé sur la taille de la table.
Pour confirmer que la compaction automatique a été exécutée sur une table, examinez l'historique de la table. La compaction automatique apparaît comme une OPTIMIZE opération avec le champ operationParameters.auto défini sur true. Une commande OPTIMIZE exécutée manuellement a auto défini sur false. Voir Identifier le type d'opération OPTIMIZE.
Écritures optimisées
Les écritures optimisées améliorent la taille des fichiers lorsque les données sont écrites et bénéficient aux lectures ultérieures sur la table.
Les écritures optimisées sont plus efficaces pour les tables partitionnées, car elles réduisent le nombre de petits fichiers écrits dans chaque partition. L'écriture de moins de fichiers volumineux est plus efficace que l'écriture de nombreux petits fichiers, mais vous pourriez quand même constater une augmentation de la latence d'écriture, car les données sont réorganisées avant d'être écrites.
L'image suivante montre le fonctionnement des écritures optimisées :

Si vous utilisez des écritures optimisées, Databricks vous recommande de ne pas exécuter coalesce(n) ou repartition(n) juste avant une écriture pour contrôler le nombre de fichiers écrits.
Les écritures optimisées sont activées par default pour les Opérations suivantes :
MERGEUPDATEavec des sous-requêtesDELETEavec des sous-requêtes
Les écritures optimisées sont également activées pour les CTAS instructions et les INSERT Opérations lors de l'utilisation de SQL warehouses. Dans Databricks Runtime 13.3 LTS et versions ultérieures, toutes les tables enregistrées dans Unity Catalog ont des écritures optimisées activées pour les CTAS instructions et les INSERT Opérations pour les tables partitionnées.
Les écritures optimisées peuvent être activées au niveau de la table ou de la session à l'aide des paramètres suivants :
- Propriété de table :
autoOptimize.optimizeWrite - Paramètre SparkSession :
spark.databricks.delta.optimizeWrite.enabled(Delta) ouspark.databricks.iceberg.optimizeWrite.enabled(Iceberg)
Ces paramètres acceptent les options suivantes :
Options | Comportement |
|---|---|
| Utilisez 128 Mo comme taille de fichier cible. |
| Désactive les écritures optimisées. Peut être défini au niveau de la session pour remplacer les écritures optimisées pour toutes les tables modifiées dans la charge de travail. |
Définir une taille de fichier cible
Pour ajuster la taille des fichiers dans votre table, définissez la propriété de table targetFileSize à la taille souhaitée. Lorsque cette option est définie, toutes les opérations d'optimisation de la Layout des données s'efforcent de générer des fichiers de la taille spécifiée, y compris l'optimisation, le clustering liquide, la compactage automatique et les écritures optimisées.
Lorsque vous utilisez des tables gérées par Unity Catalog et des SQL Warehouse ou Databricks Runtime 11,3 LTS et versions ultérieures, seules les commandes OPTIMIZE respectent le paramètre targetFileSize.
Propriété | Description |
|---|---|
| Type : taille en octets ou unités supérieures. Description : La taille du fichier cible. Par exemple, default : Aucune |
Pour les tables existantes, vous pouvez définir et annuler la définition des propriétés à l'aide de la commande SQL ALTER TABLE SET TBL PROPERTIES. Vous pouvez également définir ces propriétés automatiquement lors de la création de nouvelles tables à l'aide des configurations de session Spark. Voir la référence des propriétés de table pour plus de détails.
Ajustement automatique de la taille du fichier en fonction de la taille de la table
Pour minimiser l'ajustement manuel, Databricks ajuste automatiquement la taille des fichiers des tables en fonction de la taille de la table. Databricks utilise des tailles de fichier plus petites pour les petites tables et des tailles de fichier plus grandes pour les grandes tables afin que le nombre de fichiers dans la table ne devienne pas trop important. Databricks n'ajuste pas automatiquement les tables que vous avez ajustées avec une taille cible spécifique.
La taille du fichier cible est basée sur la taille actuelle de la table. Pour les tables inférieures à 2,56 To, la taille du fichier cible optimisée automatiquement est de 256 Mo. Pour les tables dont la taille est comprise entre 2,56 To et 10 To, la taille cible augmente linéairement de 256 Mo à 1 Go. Pour les tables supérieures à 10 To, la taille du fichier cible est de 1 Go.
Lorsque la taille de fichier cible d'une table augmente, les fichiers existants ne sont pas réoptimisés en fichiers plus volumineux par la commande OPTIMIZE. Une grande table peut donc toujours avoir des fichiers dont la taille est inférieure à la taille cible. S'il est également nécessaire d'optimiser ces fichiers plus petits en fichiers plus volumineux, vous pouvez configurer une taille de fichier cible fixe pour la table à l'aide de la propriété de table targetFileSize.
Lorsqu'une table est écrite de manière incrémentielle, la taille et le nombre de fichiers cibles seront proches des chiffres suivants, en fonction de la taille de la table. Le nombre de fichiers dans cette table n'est qu'un exemple. Les résultats réels seront différents en fonction de nombreux facteurs.
Taille de la table | Taille du fichier cible | Nombre approximatif de fichiers dans la table |
|---|---|---|
10 Go | 256 Mo | 40 |
1 To | 256 Mo | 4096 |
2,56 To | 256 Mo | 10 240 |
3 To | 307 Mo | 12 108 |
5 To | 512 Mo | 17 339 |
7 To | 716 Mo | 20 784 |
10 To | 1 Go | 24 437 |
20 To | 1 Go | 34437 |
50 To | 1 Go | 64 437 |
100 To | 1 Go | 114437 |
Limiter les lignes écrites dans un fichier de données
Occasionnellement, les tables avec des données étroites peuvent rencontrer une erreur où le nombre de lignes dans un fichier de données donné dépasse les limites de support du format Parquet. Pour éviter cette erreur, vous pouvez utiliser la configuration de session SQL spark.sql.files.maxRecordsPerFile pour spécifier le nombre maximal d'enregistrements à écrire dans un seul fichier pour une table. La spécification d'une valeur de zéro ou d'une valeur négative représente l'absence de limite.
Vous pouvez également utiliser l'option DataFrameWriter maxRecordsPerFile lorsque vous utilisez les APIs DataFrame pour écrire dans une table. Lorsque maxRecordsPerFile est spécifié, la valeur de la configuration de session SQL spark.sql.files.maxRecordsPerFile est ignorée.
Databricks ne recommande pas d'utiliser maxRecordsPerFile, sauf si cela est nécessaire pour éviter l'erreur. Ce paramètre pourrait être nécessaire pour certaines tables gérées par Unity Catalog avec des données très étroites.
Mise à niveau vers le compactage automatique en arrière-plan
Le compactage automatique en arrière-plan est disponible pour les tables gérées par Unity Catalog. La compactation automatique en arrière-plan ne nécessite pas d'optimisation prédictive. Lors de la migration d'une charge de travail ou d'une table héritée, procédez comme suit :
- Supprimer la configuration Spark
spark.databricks.delta.autoCompact.enabled(Delta) ouspark.databricks.iceberg.autoCompact.enabled(Iceberg) des paramètres de configuration du cluster ou du Notebook. - Pour chaque table, exécutez
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)(Delta) ouALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact)(Iceberg) pour supprimer les anciens paramètres de compactage automatique.
Après la suppression de ces configurations héritées, les Trigger de compaction automatique en arrière-plan s'activent automatiquement pour toutes les tables gérées par Unity Catalog.