Aller au contenu principal

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 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)

autoOptimize.autoCompact

autoOptimize.autoCompact

Active la compaction 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 minimum pour Trigger la compaction

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 Trigger le compactage automatique.

Paramètre

Delta

Iceberg

Description

Activer le compactage automatique (propriété de table)

autoOptimize.autoCompact

autoOptimize.autoCompact

Active la compaction 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 minimum pour Trigger la compaction

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 Trigger le compactage automatique.

Ces paramètres acceptent les options suivantes :

Options

Comportement

auto (recommandé)

Ajuste la taille cible des fichiers tout en respectant les autres fonctionnalités d'auto-ajustement.

legacy

Alias de true.

true

Utilisez 128 Mo comme taille de fichier cible. Pas de dimensionnement dynamique.

false

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.

Options

Comportement

auto (recommandé)

Ajuste la taille cible des fichiers tout en respectant les autres fonctionnalités d'auto-ajustement.

legacy

Alias de true.

true

Utilisez 128 Mo comme taille de fichier cible. Pas de dimensionnement dynamique.

false

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.

remarque

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 :

É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 une écriture pour contrôler le nombre de fichiers écrits.

Les écritures optimisées sont activées par default 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 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) 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 les écritures optimisées pour toutes les tables modifiées dans la charge de travail.

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 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.

remarque

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

delta.targetFileSize (Delta)

iceberg.targetFileSize (Iceberg)

Type : taille en octets ou unités supérieures.

Description : La taille du fichier cible. Par exemple, 104857600 (octets) ou 100mb.

default : Aucune

Propriété

Description

delta.targetFileSize (Delta)

iceberg.targetFileSize (Iceberg)

Type : taille en octets ou unités supérieures.

Description : La taille du fichier cible. Par exemple, 104857600 (octets) ou 100mb.

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.

remarque

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

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.

remarque

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 :

  1. Supprimer la configuration Spark spark.databricks.delta.autoCompact.enabled (Delta) ou spark.databricks.iceberg.autoCompact.enabled (Iceberg) des paramètres de configuration du cluster ou du Notebook.
  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 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.