Rinominare ed eliminare colonne con mapping di colonne Delta Lake
Azure Databricks supporta il mapping delle colonne per le tabelle Delta Lake, che consente di modificare solo i metadati per contrassegnare le colonne come eliminate o rinominate senza riscrivere i file di dati. Consente inoltre agli utenti di denominare le colonne della tabella Delta usando caratteri non consentiti da Parquet, ad esempio spazi, in modo che gli utenti possano inserire direttamente dati CSV o JSON in Delta senza dover rinominare le colonne a causa di vincoli di caratteri precedenti.
Importante
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 nelle tabelle potrebbe suddividere le operazioni downstream che si basano sul feed di dati delle modifiche Delta. Vedere Modificare le limitazioni del feed di dati per le tabelle con mapping delle colonne abilitate.
L'abilitazione del mapping delle colonne nelle tabelle potrebbe interrompere le letture in streaming dalla tabella Delta come origine, incluse le tabelle Live Delta. Vedere Streaming con mapping di colonne e modifiche dello schema.
Abilitare il mapping delle colonne
Per il mapping delle colonne sono necessari i protocolli Delta seguenti:
- Lettore versione 2 o successiva.
- Writer versione 5 o successiva.
Per una tabella Delta con le versioni del protocollo necessarie, è possibile abilitare il mapping delle colonne impostando delta.columnMapping.mode
su name
.
Per abilitare il mapping delle colonne, è possibile usare il comando seguente:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
Vedere Disabilitare il mapping delle colonne.
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 Delta Lake.
Eliminazione delle 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 Delta Lake.
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 delle colonne della tabella: ,;{}()\n\t=
.
Streaming con mapping di colonne e modifiche dello schema
Importante
Questa funzionalità è disponibile in anteprima pubblica in Databricks Runtime 13.3 LTS e versioni successive.
È possibile fornire un percorso di rilevamento dello schema per abilitare lo streaming da tabelle Delta con mapping di colonne abilitato. Questo risolve un problema in cui le modifiche dello schema non additivi potrebbero causare flussi interrotti.
Ogni flusso letto 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.
Nota
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.
L'opzione schemaTrackingLocation
viene usata per specificare il percorso per il rilevamento dello schema, come illustrato nell'esempio di codice seguente:
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)
Disabilitare il mapping delle colonne
In Databricks Runtime 15.3 e versioni successive è possibile usare il comando per rimuovere il mapping delle colonne da una tabella e effettuare il DROP FEATURE
downgrade del protocollo di tabella.