Condividi tramite


Rinominare e rimuovere colonne con la mappatura delle colonne di 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.

Se si utilizza un modello legacy che si basa sui nomi delle directory per leggere le tabelle Delta, l'abilitazione del mapping delle colonne può interrompere i carichi di lavoro legacy. Le tabelle partizionate con mapping delle colonne abilitate usano prefissi casuali anziché nomi di colonna per le directory di partizione. Consulta le strategie di partizionamento condivise da Delta Lake e Parquet.

L'abilitazione del mapping delle colonne nelle tabelle potrebbe compromettere le operazioni downstream che si basano sul flusso di dati delle modifiche Delta. Vedere Modificare le limitazioni dei feed di dati per le tabelle con mapping delle colonne.

L'abilitazione del mapping delle colonne nelle tabelle potrebbe interrompere le letture di streaming dalla tabella Delta come origine, incluse le pipeline dichiarative di Lakeflow Spark. Vedere Streaming con mapping di colonne e modifiche dello schema.

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:

  • Versione 2 o successiva del lettore.
  • Writer versione 5 o successiva.

Vedere Compatibilità e protocolli delle funzionalità delta Lake.

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.

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.

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.

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 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 mappatura delle colonne e modifiche dello schema

È 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 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.

Importante

Per abilitare il mapping delle colonne in un processo attualmente in esecuzione, è necessario arrestare e riavviare il processo almeno due volte( ovvero riavviare due volte).

  • Il primo riavvio inizializza la mappatura delle colonne.
  • Il secondo riavvio consente di rendere effettive le modifiche dello schema.

Eventuali ulteriori modifiche dello schema, ad esempio l'aggiunta o l'eliminazione di colonne o la modifica di un tipo di colonna, richiedono anche il riavvio del processo.

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")
)