Rinominare ed eliminare colonne con il mapping delle colonne Delta Lake

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Azure Databricks supporta il mapping delle colonne per le tabelle Delta Lake, che consente di contrassegnare le colonne come eliminate o rinominate senza riscrivere i file di dati. Consente inoltre agli utenti di assegnare un nome alle 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 la necessità di rinominare le colonne a causa di vincoli di caratteri precedenti.

Importante

L'abilitazione del mapping delle colonne abilita anche prefissi di file casuali, che consente di esplorare i dati usando il partizionamento in stile Hive. Vedere Do Delta Lake and Parquet share partitioning strategies?.See Do Delta Lake and Parquet share partitioning strategies?.

L'abilitazione del mapping delle colonne nelle tabelle potrebbe suddividere le operazioni downstream basate sul feed di dati delle modifiche Delta. Vedere Limitazioni del feed di dati delle modifiche per le tabelle con il mapping delle colonne abilitato.

L'abilitazione del mapping delle colonne nelle tabelle potrebbe interrompere la lettura del flusso dalla tabella Delta come origine, incluse le tabelle live Delta. Vedere Streaming con mapping delle colonne e modifiche dello schema.

Come abilitare il mapping delle colonne Delta Lake

Importante

L'abilitazione del mapping delle colonne per una tabella aggiorna la versione della tabella Delta. Questo aggiornamento del protocollo è irreversibile. Le tabelle con mapping delle colonne abilitate possono essere lette solo in Databricks Runtime 10.2 e versioni successive.

Il mapping delle colonne richiede 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.

È possibile usare il comando seguente per aggiornare la versione della tabella e abilitare il mapping delle colonne:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '2',
    'delta.minWriterVersion' = '5',
    'delta.columnMapping.mode' = 'name'
  )

Nota

Non è possibile disattivare il mapping delle colonne dopo averlo abilitato. Se si tenta di impostare 'delta.columnMapping.mode' = 'none', verrà visualizzato un errore.

Rinominare una colonna

Nota

Disponibile in Databricks Runtime 10.2 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.

Eliminare colonne

Nota

Disponibile in Databricks Runtime 11.0 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 di colonna

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

Streaming con mapping delle colonne e modifiche dello schema

Importante

Questa funzionalità è disponibile in anteprima pubblica in Databricks Runtime 13.1 e versioni successive.

È possibile specificare un percorso di rilevamento dello schema per abilitare lo streaming dalle tabelle Delta con il mapping delle colonne abilitato. In questo modo si risolve un problema in cui le modifiche dello schema non additive potrebbero causare flussi interrotti.

Ogni flusso letto in un'origine dati deve avere un valore specifico schemaTrackingLocation . 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")
)