Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- Le tabelle con mapping delle colonne abilitate possono essere lette solo in Databricks Runtime 10.4 LTS e versioni successive
- L'abilitazione del mapping delle colonne potrebbe interrompere:
- Carichi di lavoro legacy che si basano sui nomi di directory per la lettura delle tabelle Delta. Le tabelle partizionate con mapping di colonne usano prefissi casuali anziché nomi di colonna per le directory di partizione. Consulta le strategie di partizionamento condivise da Delta Lake e Parquet.
- Operazioni a valle che utilizzano il feed dei dati di modifica Delta. Vedere Modificare le limitazioni dei feed di dati per le tabelle con mapping delle colonne.
- Streaming delle letture dalla tabella Delta, incluse le pipeline dichiarative di Lakeflow Spark. Vedere Mapping e streaming delle colonne.
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:
- Sospendere tutte le operazioni di scrittura simultanee, inclusi i processi di streaming e le pipeline ETL.
- Disabilitare l'ottimizzazione predittiva nella tabella.
- 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:
- Interrompere l'attività
- Abilitare il mapping delle colonne nella tabella
- Riavviare il processo (primo riavvio- inizializza il mapping delle colonne)
- 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")
)