Umbenennen und Löschen von Spalten mit Delta Lake-Spaltenzuordnung

Wichtig

Dieses Feature befindet sich in der Public Preview.

Azure Databricks unterstützt die Spaltenzuordnung für Delta Lake-Tabellen, die ausschließliche Metadatenänderungen ermöglicht, um Spalten als gelöscht oder umbenannt zu markieren, ohne Datendateien neu zu schreiben. Außerdem können Benutzer die Spalten von Delta-Tabellen mit Zeichen benennen, die in Parquet nicht zulässig sind, wie z. B. Leerzeichen, sodass Benutzer CSV- oder JSON-Daten direkt in Delta erfassen können, ohne Spalten aufgrund bisheriger Zeicheneinschränkungen umbenennen zu müssen.

Wichtig

Die Aktivierung der Spaltenzuordnung ermöglicht auch zufällige Dateipräfixe, wodurch die Möglichkeit zum Untersuchen von Daten mithilfe der Partitionierung im Hive-Stil entfällt. Siehe Haben Delta Lake und Parquet dieselben Partitionierungsstrategien?

Das Aktivieren der Spaltenzuordnung für Tabellen kann nachgeschaltete Vorgänge unterbrechen, die auf einem Delta-Änderungsdatenfeed basieren. Weitere Informationen finden Sie unter Ändern von Datenfeedeinschränkungen für Tabellen mit aktivierter Spaltenzuordnung.

Das Aktivieren der Spaltenzuordnung für Tabellen kann das Streamen von Lesevorgängen aus der Delta-Tabelle als Quelle unterbrechen, wie z. B. in Delta Live Tables. Weitere Informationen finden Sie unter Streaming mit Spaltenzuordnung und Schemaänderungen.

Aktivieren der Delta Lake-Spaltenzuordnung

Wichtig

Durch Aktivieren der Spaltenzuordnung für eine Tabelle wird die Delta-Tabellenversion aktualisiert. Dieses Protokollupgrade ist irreversibel. Tabellen mit aktivierter Spaltenzuordnung können nur in Databricks Runtime 10.4 LTS und höher gelesen werden.

Für die Spaltenzuordnung sind die folgenden Delta-Protokolle erforderlich:

  • Reader Version 2 oder höher.
  • Writer Version 5 oder höher.

Für eine Delta-Tabelle mit den erforderlichen Protokollversionen können Sie die Spaltenzuordnung aktivieren, indem Sie delta.columnMapping.mode auf name festlegen.

Sie können den folgenden Befehl verwenden, um die Tabellenversion zu aktualisieren und die Spaltenzuordnung zu aktivieren:

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

Hinweis

Sie können die Spaltenzuordnung nicht deaktivieren, nachdem Sie sie aktiviert haben. Wenn Sie versuchen, 'delta.columnMapping.mode' = 'none' festzulegen, erhalten Sie eine Fehlermeldung.

Umbenennen einer Spalte

Hinweis

Verfügbar in Databricks Runtime 10.4 LTS und höher.

Wenn die Spaltenzuordnung für eine Delta-Tabelle aktiviert ist, können Sie eine Spalte umbenennen:

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

Weitere Beispiele finden Sie unter Update Delta Lake table schema (Aktualisieren des Delta Lake-Tabellenschemas).

Löschen von Spalten (drop_columns)

Hinweis

Verfügbar in Databricks Runtime 11.3 LTS und höher.

Wenn die Spaltenzuordnung für eine Delta-Tabelle aktiviert ist, können Sie eine oder mehrere Spalten löschen:

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

Ausführlichere Informationen finden Sie unter Update Delta Lake table schema (Aktualisieren des Delta Lake-Tabellenschemas).

Unterstützte Zeichen in Spaltennamen

Wenn die Spaltenzuordnung für eine Delta-Tabelle aktiviert ist, können Sie Leerzeichen sowie eines dieser Zeichen in die Spaltennamen der Tabelle einschließen: ,;{}()\n\t=.

Streaming mit Spaltenzuordnung und Schemaänderungen

Wichtig

Dieses Feature befindet sich in Databricks Runtime 13.3 LTS und höheren Versionen in der Public Preview.

Sie können einen Speicherort für die Schemanachverfolgung bereitstellen, um das Streaming von Delta-Tabellen mit aktivierter Spaltenzuordnung zu ermöglichen. Dadurch wird ein Problem behoben, das bewirkt, dass nicht additive Schemaänderungen zu unterbrochenen Datenströmen führen können.

Jeder Streaminglesevorgang aus einer Datenquelle muss über einen eigenen schemaTrackingLocation-Wert verfügen. Der angegebene schemaTrackingLocation muss sich in dem Verzeichnis befinden, das als checkpointLocation der Zieltabelle für den Streamingschreibvorgang angegeben ist.

Hinweis

Für Streamingworkloads, die Daten aus mehreren Delta-Quelltabellen kombinieren, müssen Sie eindeutige Verzeichnisse innerhalb des Speicherorts checkpointLocation für jede Quelltabelle angeben.

Die Option schemaTrackingLocation wird verwendet, um den Pfad für die Schemanachverfolgung anzugeben, wie im folgenden Codebeispiel gezeigt:

checkpoint_path = "/path/to/checkpointLocation"

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