Aller au contenu principal

Renommer et supprimer des colonnes avec le mappage de colonnes Delta Lake

Le mappage de colonnes Delta Lake permet des modifications de métadonnées uniquement pour renommer ou supprimer des colonnes sans réécrire les fichiers de données. Le mappage de colonnes permet également des caractères non pris en charge par Parquet dans les noms de colonne, tels que les espaces, afin que vous puissiez ingérer directement les données CSV ou JSON dans Delta Lake sans renommer les colonnes.

Prérequis

Avant d'activer le mappage des colonnes, examinez les Limitations.

Le mappage de colonnes nécessite les éléments suivants :

Activer le mappage des colonnes

Utilisez la commande suivante pour activer le mappage de colonnes avec le mode id sur une nouvelle table :

SQL
CREATE table <table-name> (
id INT,
name STRING
)
USING DELTA
TBLPROPERTIES (
'delta.columnMapping.mode' = 'id'
);

Utilisez la commande suivante pour activer le mappage des colonnes avec le mode name sur une table existante :

SQL
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)

Pour plus de détails sur les modes de mappage de colonnes, consultez Modes de mappage de colonnes.

Renommer une colonne

Lorsque le mappage des colonnes est activé pour une table Delta Lake, vous pouvez renommer une colonne :

SQL
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

Pour plus d'exemples, consultez Mettre à jour les schémas de table avec l'évolution des schémas.

Supprimer les colonnes

Lorsque le mappage de colonnes est activé pour une table Delta Lake, vous pouvez supprimer une ou plusieurs colonnes :

SQL
ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

Pour plus de détails, consultez Mettre à jour les schémas de table avec l'évolution des schémas.

Modes de mappage de colonnes

La propriété de table delta.columnMapping.mode permet des modifications de métadonnées uniquement pour marquer les colonnes comme supprimées ou renommées sans réécrire les fichiers de données. Les modes suivants sont disponibles :

  • none ** ** (default) : le mappage des colonnes n'est pas activé. Les noms de colonne sont soumis aux contraintes de nommage Parquet.
  • name : Cela permet le renommage et la suppression de colonnes basés uniquement sur les métadonnées, et autorise les caractères spéciaux dans les noms de colonne. Le mode name peut être défini sur les tables nouvelles et existantes.
  • id : Cela permet le renommage et la suppression de colonnes basés uniquement sur les métadonnées, et autorise les caractères spéciaux dans les noms de colonne. Le mode id doit être défini lors de la création de la table et ne peut pas être défini sur des tables existantes.
remarque

Databricks recommande le mode id pour la plupart des cas d'utilisation à des fins de compatibilité. Cependant, le mode name est défini automatiquement si vous ne fournissez pas de valeur pour delta.columnMapping.mode et que vous activez des fonctionnalités de compatibilité Iceberg telles que UniForm.

Caractères pris en charge dans les noms de colonne

Lorsque le mappage de colonnes est activé pour une table Delta Lake, vous pouvez inclure des espaces et n'importe lequel de ces caractères dans les noms de colonne : ,;{}()\n\t=.

Supprimer le mappage de colonne

attention

La suppression du mappage de colonnes réécrit tous les fichiers de données pour remplacer les noms de colonnes physiques par des noms logiques. Cette opération ne prend pas en charge la résolution des conflits au niveau des lignes ou des conflits physiques.

Les opérations d’écriture simultanées provoqueront une ConcurrentModificationException.

Avant de supprimer le mappage de colonnes :

  1. Interrompez toutes les opérations d'écriture concurrentes, y compris les Jobs de streaming et les pipelines ETL.
  2. Désactivez l'optimisation prédictive sur la table.
  3. Pour les grandes tables, planifiez cette opération pendant les périodes de faible activité.

Vous pouvez supprimer le mappage de colonnes d'une table à l'aide de la commande suivante :

SQL
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')

Pour supprimer le mappage de colonnes et rétrograder le protocole de la table, consultez Maintenir la compatibilité.

Maintenir la compatibilité

Dans Databricks Runtime 15.4 LTS et versions ultérieures, vous pouvez utiliser la commande DROP FEATURE pour supprimer le mappage de colonnes et rétrograder le protocole de table, tout en maintenant la compatibilité avec les lecteurs utilisant Databricks Runtime 10.3 et versions antérieures.

important

La suppression du mappage des colonnes d'une table ne supprime pas les préfixes aléatoires utilisés dans les noms de répertoires des tables partitionnées.

Consultez Supprimer une fonctionnalité de table Delta Lake et rétrograder le protocole de table.

Mappage de colonnes et streaming

Les modifications de schéma non additives, telles que les renommages ou suppressions de colonnes, peuvent interrompre les lectures en streaming. Utilisez un schemaTrackingLocation pour permettre à Delta Lake de suivre les modifications de schéma et d'éviter les échecs de stream.

Configuration

Lors de la configuration de schemaTrackingLocation:

  • Chaque lecture en streaming à partir d’une table source doit avoir son propre schemaTrackingLocation.
  • Le schemaTrackingLocation doit se trouver dans le répertoire checkpointLocation de la cible d'écriture en streaming.
  • Pour les charges de travail qui lisent à partir de plusieurs tables source, spécifiez des sous-répertoires uniques dans checkpointLocation pour chaque source.

Pour une liste complète des options de streaming Delta Lake, consultez Delta Lake.

Activer le mappage des colonnes sur un Stream actif

Pour activer le mappage des colonnes sur un job de streaming actif :

  1. Arrêter le Stream
  2. Activer le mappage des colonnes sur la table
  3. Redémarrer le Stream (premier redémarrage - initialise le mappage des colonnes)
  4. Redémarrez le Stream à nouveau (deuxième redémarrage - permet les changements de schéma)

Toute modification supplémentaire du schéma (ajout ou suppression de colonnes, ou modification des types de colonnes) vous oblige à redémarrer le Stream.

Exemple

Pour spécifier un schemaTrackingLocation pour une lecture en streaming à partir d'une table Delta Lake avec mappage de colonnes, utilisez l'exemple suivant :

Python
checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)

Limitations

L'activation du mappage des colonnes pourrait entraîner la rupture des éléments suivants :

Ressources supplémentaires