Condividi tramite


Rinominare e rimuovere colonne con la mappatura delle colonne di Delta Lake

Questa pagina descrive in che modo il mapping delle colonne Delta Lake consente alle modifiche solo ai metadati di contrassegnare le colonne come eliminate o rinominate senza riscrivere i file di dati.

Azure Databricks supporta il mapping delle colonne per le tabelle Delta Lake. Il mapping delle colonne consente di modificare solo i metadati per contrassegnare le colonne come eliminate o rinominate senza riscrivere i file di dati. Il mapping delle colonne consente anche di usare caratteri non consentiti da Parquet nei nomi di colonne, ad esempio spazi. In questo modo è possibile inserire direttamente dati CSV o JSON in Delta senza rinominare le colonne.

Prerequisiti e limitazioni

Prima di abilitare il mapping delle colonne, comprendere le limitazioni seguenti:

Abilitare il mapping delle colonne

Usare il comando seguente per abilitare il mapping delle colonne:

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

Per il mapping delle colonne sono necessari i protocolli Delta seguenti:

  • Lettore versione 2 o successiva
  • Writer versione 5 o successiva

Vedere Compatibilità e protocolli delle funzionalità delta Lake.

Rinominare una colonna

Nota

È disponibile in Databricks Runtime 10.4 LTS e versioni successive.

Quando il mapping delle colonne è abilitato per una tabella Delta, è possibile rinominare una colonna:

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

Per altri esempi, vedere Aggiornare lo schema della tabella.

Rimuovere colonne

Nota

Disponibile in Databricks Runtime 11.3 LTS e versioni successive.

Quando il mapping delle colonne è abilitato per una tabella Delta, è possibile eliminare una o più colonne:

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

Per altri dettagli, vedere Aggiornare lo schema della tabella.

Caratteri supportati nei nomi delle colonne

Quando il mapping delle colonne è abilitato per una tabella Delta, è possibile includere spazi e uno di questi caratteri nei nomi di colonna: ,;{}()\n\t=.

Rimuovere il mapping delle colonne

È possibile rimuovere il mapping delle colonne da una tabella usando il comando seguente:

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

Avviso

La rimozione del mapping delle colonne riscrive tutti i file di dati per sostituire i nomi delle colonne fisiche con nomi logici. Questa operazione non supporta la risoluzione dei conflitti a livello di riga o a livello fisico.

Le operazioni di scrittura simultanee causeranno un ConcurrentModificationException. Prima di rimuovere la mappatura delle colonne:

  1. Sospendere tutte le operazioni di scrittura simultanee, inclusi i processi di streaming e le pipeline ETL.
  2. Disabilitare l'ottimizzazione predittiva nella tabella.
  3. Per tabelle di grandi dimensioni, pianificare questa operazione durante periodi di attività ridotta.

Per un approccio alternativo che supporta il downgrade del protocollo di tabella, vedere Disabilitare il mapping delle colonne.

Disabilitare il mapping delle colonne

In Databricks Runtime 15.3 e versioni successive, è possibile usare il comando DROP FEATURE per rimuovere il mapping delle colonne e effettuare il downgrade del protocollo di tabella. Usare questo approccio anziché rimuovere il mapping delle colonne se è necessario effettuare il downgrade delle versioni del protocollo per garantire la compatibilità con i lettori meno recenti.

Importante

L'eliminazione del mapping delle colonne da una tabella non rimuove i prefissi casuali usati nei nomi di directory per le tabelle partizionate.

Vedere Eliminare una funzionalità di tabella Delta Lake e effettuare il downgrade del protocollo di tabella.

Mapping delle colonne e streaming

È possibile fornire un percorso di rilevamento dello schema per abilitare lo streaming da tabelle Delta con mapping di colonne abilitato. Questo risolve un problema per cui le modifiche dello schema non additivi potrebbero causare flussi interrotti.

Ogni lettura in streaming su un'origine dati deve avere un proprio schemaTrackingLocation specificato. L'oggetto specificato schemaTrackingLocation deve essere contenuto all'interno della directory specificata per la checkpointLocation tabella di destinazione per la scrittura in streaming. Per i carichi di lavoro di streaming che combinano dati da più tabelle Delta di origine, è necessario specificare directory univoche all'interno di checkpointLocation per ogni tabella di origine.

Abilitare il mapping delle colonne in un processo in esecuzione

Importante

Per abilitare il mapping delle colonne in un processo di streaming in esecuzione:

  1. Interrompere l'attività
  2. Abilitare il mapping delle colonne nella tabella
  3. Riavviare il processo (primo riavvio- inizializza il mapping delle colonne)
  4. Riavviare di nuovo il processo (secondo riavvio: abilita le modifiche dello schema)

Eventuali altre modifiche dello schema (aggiunta o eliminazione di colonne, modifica dei tipi di colonna) richiedono anche il riavvio del processo.

Specificare il percorso di rilevamento dello schema

L'esempio seguente illustra come specificare un schemaTrackingLocation per una lettura in streaming da una tabella Delta con mapping di colonne.

checkpoint_path = "/path/to/checkpointLocation"

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

Passaggi successivi