Contrôler la taille du fichier de données

Remarque

Les recommandations de réglage manuel ne s’appliquent pas aux tables gérées par le catalogue Unity, qui utilisent le réglage automatique de la taille des fichiers. Pour les nouvelles tables, utilisez les tables gérées par le catalogue Unity avec les paramètres par défaut.

Dans Databricks Runtime 13.3 LTS et versions ultérieures, Databricks recommande d’utiliser le clustering pour la disposition des tables. Consultez Utilisation de Liquid Clustering 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 managées 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é.

Azure Databricks ajuste automatiquement les tailles de fichier pour les tables gérées par le catalogue Unity. Pour les tables externes et les charges de travail héritées, vous pouvez configurer le compactage automatique, les écritures optimisées et les tailles de fichiers cibles pour contrôler la façon dont les données sont écrites et compactées.

Pour les tables gérées par le catalogue Unity, Databricks ajuste automatiquement la plupart des configurations si vous utilisez un entrepôt SQL ou Databricks Runtime 11.3 LTS ou une version ultérieure.

Si vous mettez à niveau une charge de travail à partir de Databricks Runtime 10.4 LTS ou d'une version antérieure, consultez Mise à niveau vers le compactage 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 sont pas un remplacement complet pour OPTIMIZE. Pour les tables de plus de 1 To, Databricks recommande d’exécuter OPTIMIZE à intervalles réguliers afin de consolider davantage les fichiers. Databricks recommande le liquid clustering pour un meilleur saut de données. Lorsque le clustering liquide est activé, OPTIMIZE réorganise automatiquement les données par les clés de clustering. Consultez Utilisation de Liquid Clustering pour les tables.

Pour les tables gérées par le catalogue Unity, l’optimisation prédictive s’exécute OPTIMIZE automatiquement sur des tables avec l’optimisation prédictive activée.

Optimisation automatique

L’optimisation automatique décrit les paramètres autoOptimize.autoCompact et autoOptimize.optimizeWrite. Consultez compactage automatique et écritures optimisées.

Compactage automatique

Le compactage automatique combine les petits fichiers au sein des partitions d'une 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, une fois l’écriture réussie et compacte uniquement les fichiers qui n’ont pas été compactés précédemment.

Le compactage automatique et l’optimisation prédictive sont des fonctionnalités indépendantes qui peuvent être utilisées séparément ou ensemble. Le compactage automatique s’exécute sur le cluster exécutant l’écriture, tandis que l’optimisation prédictive exécute les opérations de maintenance de manière asynchrone à l’aide du calcul serverless.

Utilisez les paramètres suivants pour configurer le compactage automatique :

Setting Delta Iceberg Description
Activer le compactage automatique (propriété de table) autoOptimize.autoCompact autoOptimize.autoCompact Active le compactage automatique au niveau de la table.
Activer le compactage automatique (session Spark) spark.databricks.delta.autoCompact.enabled spark.databricks.iceberg.autoCompact.enabled Active le compactage automatique au niveau de la session.
Taille maximale du fichier de sortie spark.databricks.delta.autoCompact.maxFileSize spark.databricks.iceberg.autoCompact.maxFileSize Contrôle la taille du fichier de sortie cible.
Fichiers minimaux pour déclencher un compactage spark.databricks.delta.autoCompact.minNumFiles spark.databricks.iceberg.autoCompact.minNumFiles Définit le nombre minimal de petits fichiers requis dans une partition ou une table pour déclencher le compactage automatique.

Ces paramètres acceptent les options suivantes :

Options Comportement
auto (recommandé) Ajuste la taille du fichier cible tout en respectant d’autres fonctionnalités de réglage automatique.
legacy Alias de true.
true Utilisez 128 Mo comme taille de fichier cible. Aucun dimensionnement dynamique.
false Désactive le compactage automatique. Peut être défini au niveau de la session pour remplacer le compactage automatique sur toutes les tables modifiées dans la charge de travail.

Remarque

Azure Databricks recommande d’utiliser l’autotuning pour contrôler la taille du fichier de sortie en fonction de la taille de la table. Consultez la taille du fichier autotune en fonction de la taille de la table.

Écritures optimisées

Les écritures optimisées améliorent la taille du fichier à mesure que les données sont écrites et bénéficient aux lectures ultérieures de la table.

Les écritures optimisées sont les plus efficaces pour les tables partitionnées, car elles réduisent le nombre de petits fichiers écrits sur chaque partition. Écrire moins de fichiers volumineux est plus efficace que l’écriture de nombreux petits fichiers, mais vous pouvez toujours voir une augmentation de la latence d’écriture, car les données sont mélangées avant d’être écrites.

L’image suivante montre comment fonctionne l'écriture optimisée :

Écritures optimisées

Remarque

Si vous utilisez des écritures optimisées, Databricks vous recommande de ne pas exécuter coalesce(n) ou repartition(n) juste avant d’écrire pour contrôler le nombre de fichiers écrits.

Les écritures optimisées sont activées par défaut pour les opérations suivantes :

  • MERGE
  • UPDATE avec des sous-requêtes
  • DELETE avec des sous-requêtes

Les écritures optimisées sont également activées pour les instructions CTAS et les opérations INSERT lors de l’utilisation d’entrepôts SQL. Dans Databricks Runtime 13.3 LTS et versions ultérieures, toutes les tables enregistrées dans Unity Catalog ont les écritures optimisées activées pour les instructions CTAS et les opérations INSERT 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) ou spark.databricks.iceberg.optimizeWrite.enabled (Iceberg)

Ces paramètres acceptent les options suivantes :

Options Comportement
true Utilisez 128 Mo comme taille de fichier cible.
false Désactive les écritures optimisées. Peut être défini au niveau de la session pour remplacer l’écriture optimisée sur toutes les tables modifiées dans la charge de travail.

Définir la taille d’un fichier cible

Pour régler la taille des fichiers dans votre table, définissez la propriété targetFileSize sur la taille souhaitée. Lorsqu’elle est définie, toutes les opérations d’optimisation de l’organisation des données s’efforcent de générer des fichiers de la taille spécifiée, y compris optimize, liquid clustering, auto compaction et optimized writes.

Remarque

Lorsque vous utilisez des tables managées Unity Catalog et des entrepôts SQL ou Databricks Runtime 11.3 LTS et versions ultérieures, seules les commandes OPTIMIZE respectent le paramètre targetFileSize.

Propriété Description
delta.targetFileSize (Delta)
iceberg.targetFileSize (Iceberg)
Type : taille en octets ou unités supérieures.
Description : taille du fichier cible. Par exemple, 104857600 (octets) ou 100mb.
Valeur par défaut : None

Pour les tables existantes, vous pouvez définir et annuler les propriétés à l’aide de la commande SQL ALTER TABLESET TBL PROPERTIES. Vous pouvez également définir ces propriétés automatiquement lors de la création de tables à l’aide de configurations de session Spark. Pour plus d’informations, consultez les informations de référence sur les propriétés de la table .

Dimensionner automatiquement la taille du fichier en fonction de la taille de la table

Pour réduire le réglage manuel, Azure Databricks ajuste automatiquement la taille de fichier des tables en fonction de la taille de la table. Azure Databricks utilise des tailles de fichiers plus petites pour les tables plus petites et des tailles de fichiers plus grandes pour les tables plus volumineuses afin que le nombre de fichiers de la table ne augmente pas trop grand. Azure Databricks ne met pas automatiquement en forme les tables que vous avez paramétré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 réglé 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 de plus de 10 To, la taille du fichier cible est de 1 Go.

Remarque

Lorsque la taille du fichier cible d’une table augmente, les fichiers existants ne sont pas réoptimisés dans des fichiers plus volumineux par la commande OPTIMIZE. Une table de grande taille peut donc toujours avoir des fichiers dont la taille est inférieure à celle de la cible. S’il est nécessaire d’optimiser ces fichiers plus petits dans des fichiers plus volumineux, vous pouvez configurer une taille de fichier cible fixe pour la table à l’aide de la propriété de table targetFileSize.

Quand une table est écrite de façon incrémentielle, les tailles des fichiers cibles et le nombre de fichiers sont proches des chiffres suivants, en fonction de la taille de la table. Le nombre de fichiers dans ce tableau 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 10240
3 To 307 Mo 12108
5 To 512 Mo 17339
7 To 716 Mo 20784
10 To 1 Go 24437
20 To 1 Go 34437
50 To 1 Go 64437
100 To 1 Go 114437

Limiter les lignes écrites dans un fichier de données

Les tables avec des données étroites peuvent parfois rencontrer une erreur lorsque le nombre de lignes dans un fichier de données spécifique dépasse les limites de prise en charge du format Parquet. Pour éviter cette erreur, vous pouvez utiliser la configuration spark.sql.files.maxRecordsPerFile de session SQL pour spécifier le nombre maximal d’enregistrements à écrire dans un fichier unique pour une table. La spécification d’une valeur égale à zéro ou d’une valeur négative représente aucune limite.

Vous pouvez également utiliser l’option maxRecordsPerFile DataFrameWriter lors de l’utilisation des API DataFrame pour écrire dans une table. Quand maxRecordsPerFile est spécifié, la valeur de la configuration de session SQL spark.sql.files.maxRecordsPerFile est ignorée.

Remarque

Databricks ne recommande pas l’utilisation maxRecordsPerFile , sauf s’il est nécessaire d’éviter l’erreur. Ce paramètre peut être nécessaire pour certaines tables gérées par le catalogue Unity 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 le catalogue Unity. Le compactage 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 ainsi :

  1. Supprimez la configuration spark.databricks.delta.autoCompact.enabled Spark (Delta) ou spark.databricks.iceberg.autoCompact.enabled (Iceberg) des paramètres de configuration du cluster ou du bloc-notes.
  2. Pour chaque table, exécutez ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) (Delta) ou ALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact) (Iceberg) pour supprimer les paramètres de compactage automatique hérités.

Après avoir supprimé ces configurations héritées, le compactage automatique en arrière-plan se déclenche automatiquement pour toutes les tables gérées par le catalogue Unity.