Partager via


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

Cette page décrit comment le mappage de colonnes Delta Lake active les modifications de métadonnées uniquement pour marquer les colonnes comme supprimées ou renommées sans réécriture de fichiers de données.

Azure Databricks prend en charge le mappage de colonnes pour les tables Delta Lake. Le mappage de colonnes active les modifications de métadonnées uniquement pour marquer les colonnes comme supprimées ou renommées sans réécriture de fichiers de données. Le mappage de colonnes vous permet également d’utiliser des caractères non autorisés par Parquet dans les noms de colonnes, tels que les espaces. Cela vous permet d’ingérer directement des données CSV ou JSON dans Delta sans renommer les colonnes.

Conditions préalables et limitations

Avant d’activer le mappage de colonnes, comprenez les limitations suivantes :

Activer le mappage de colonnes

Utilisez la commande suivante pour activer le mappage de colonnes :

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

Le mappage de colonnes exige les protocoles Delta suivants :

  • Lecteur PDF version 2 ou ultérieure
  • Writer version 5 ou ultérieure

Consultez les protocoles et la compatibilité des fonctionnalités Delta Lake.

Renommer une colonne

Remarque

Disponible dans Databricks Runtime 10.4 LTS et versions ultérieures.

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

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

Pour plus d’exemples, consultez Mettre à jour le schéma de table.

Supprimer des colonnes

Remarque

Disponible dans Databricks Runtime 11.3 LTS et versions ultérieures.

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

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

Pour plus d’informations, consultez Mettre à jour le schéma de table.

Caractères pris en charge dans les noms de colonnes

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

Supprimer le mappage de colonnes

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

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

Avertissement

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 physiques ou au niveau des lignes.

Les opérations d’écriture simultanées provoquent un ConcurrentModificationException. Avant de supprimer le mappage de colonnes :

  1. Suspendez toutes les opérations d’écriture simultanées, notamment les travaux de streaming et les pipelines ETL.
  2. Désactivez l’optimisation prédictive sur la table.
  3. Pour les tables volumineuses, planifiez cette opération pendant les périodes de faible activité.

Pour une autre approche qui prend en charge la rétrogradation du protocole de table, consultez Désactiver le mappage de colonnes.

Désactiver le mappage de colonnes

Dans Databricks Runtime 15.3 et versions ultérieures, vous pouvez utiliser la commande pour supprimer le DROP FEATURE mappage de colonnes et rétrograder le protocole de table. Utilisez cette approche au lieu de supprimer le mappage de colonnes si vous devez rétrograder les versions de protocole pour la compatibilité avec les lecteurs plus anciens.

Important

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

Consultez Supprimer une fonctionnalité de table Delta Lake et passer à une version antérieure du protocole de table.

Mappage de colonnes et diffusion en continu

Vous pouvez fournir un emplacement de suivi des schémas pour activer le streaming à partir de tables Delta avec un mappage de colonnes activé. Cela résout un problème où les modifications de schéma non additifs peuvent entraîner des flux rompus.

Chaque lecture en continu effectuée sur une source de données doit avoir son propre schemaTrackingLocation spécifié. Le schemaTrackingLocation spécifié doit être contenu dans le répertoire défini pour le checkpointLocation de la table cible pour l’écriture en streaming. Pour les charges de travail de streaming qui combinent les données de plusieurs tables Delta sources, vous devez spécifier des répertoires uniques dans le checkpointLocation pour chaque table source.

Activer le mappage de colonnes sur un travail en cours d’exécution

Important

Pour activer le mappage de colonnes sur un travail de streaming en cours d’exécution :

  1. Arrêter le travail
  2. Activer le mappage de colonnes sur la table
  3. Redémarrez le travail (premier redémarrage - initialise le mappage de colonnes)
  4. Redémarrez à nouveau le travail (deuxième redémarrage : active les modifications de schéma)

Toute autre modification de schéma (ajout ou suppression de colonnes, modification des types de colonnes) nécessite également le redémarrage du travail.

Spécifier l’emplacement de suivi du schéma

L’exemple suivant montre comment spécifier une schemaTrackingLocation pour une lecture en continu depuis une table Delta avec mappage de colonnes :

checkpoint_path = "/path/to/checkpointLocation"

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

Prochaines étapes