Byt namn på och släpp kolumner med Delta Lake-kolumnmappning

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

Azure Databricks har stöd för kolumnmappning för Delta Lake-tabeller, vilket gör att ändringar med endast metadata kan markera kolumner som borttagna eller omdöpta utan att skriva om datafiler. Det gör det också möjligt för användare att namnge Delta-tabellkolumner med tecken som inte tillåts av Parquet, till exempel blanksteg, så att användarna direkt kan mata in CSV- eller JSON-data i Delta utan att behöva byta namn på kolumner på grund av tidigare teckenbegränsningar.

Viktigt!

Aktivering av kolumnmappning möjliggör också slumpmässiga filprefix, vilket tar bort möjligheten att utforska data med hive-partitionering. Se Dela partitioneringsstrategier för Delta Lake och Parquet?.

Aktivering av kolumnmappning i tabeller kan bryta nedströmsåtgärder som förlitar sig på deltaändringsdataflöde. Se Ändra dataflödesbegränsningar för tabeller med kolumnmappning aktiverat.

Om du aktiverar kolumnmappning på tabeller kan det bryta strömningsläsningen från Delta-tabellen som källa, inklusive i Delta Live Tables. Mer information finns i Strömning med kolumnmappning och schemaändringar.

Så här aktiverar du Delta Lake-kolumnmappning

Viktigt!

Om du aktiverar kolumnmappning för en tabell uppgraderas Delta-tabellversionen. Den här protokolluppgradering är oåterkallelig. Tabeller med kolumnmappning aktiverat kan bara läsas i Databricks Runtime 10.4 LTS och senare.

Kolumnmappning kräver följande Delta-protokoll:

  • Läsarversion 2 eller senare.
  • Skrivarversion 5 eller senare.

För en Delta-tabell med de protokollversioner som krävs kan du aktivera kolumnmappning genom att ange delta.columnMapping.mode till name.

Du kan använda följande kommando för att uppgradera tabellversionen och aktivera kolumnmappning:

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

Kommentar

Du kan inte inaktivera kolumnmappning när du har aktiverat den. Om du försöker ange 'delta.columnMapping.mode' = 'none'får du ett fel.

Byt namn på en kolumn

Kommentar

Finns i Databricks Runtime 10.4 LTS och senare.

När kolumnmappning är aktiverat för en Delta-tabell kan du byta namn på en kolumn:

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

Fler exempel finns i Uppdatera Delta Lake-tabellschema.

Ta bort kolumner

Kommentar

Finns i Databricks Runtime 11.3 LTS och senare.

När kolumnmappning är aktiverat för en Delta-tabell kan du släppa en eller flera kolumner:

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

Mer information finns i Uppdatera Delta Lake-tabellschema.

Tecken som stöds i kolumnnamn

När kolumnmappning är aktiverat för en Delta-tabell kan du inkludera blanksteg och något av dessa tecken i tabellens kolumnnamn: ,;{}()\n\t=.

Direktuppspelning med kolumnmappning och schemaändringar

Viktigt!

Den här funktionen finns i offentlig förhandsversion i Databricks Runtime 13.3 LTS och senare.

Du kan ange en plats för schemaspårning för att aktivera strömning från Delta-tabeller med kolumnmappning aktiverat. Detta löser ett problem där icke-additiva schemaändringar kan resultera i brutna strömmar.

Varje direktuppspelning som läse mot en datakälla måste ha en egen schemaTrackingLocation angiven. Den angivna schemaTrackingLocation måste finnas i den katalog som angetts för måltabellen checkpointLocation för direktuppspelningsskrivning.

Kommentar

För strömmande arbetsbelastningar som kombinerar data från flera Delta-källtabeller måste du ange unika kataloger i checkpointLocation för varje källtabell.

Alternativet schemaTrackingLocation används för att ange sökvägen för schemaspårning, enligt följande kodexempel:

checkpoint_path = "/path/to/checkpointLocation"

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