Freigeben über


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

Auf dieser Seite wird beschrieben, wie die Delta Lake-Spaltenzuordnung Änderungen nur in den Metadaten ermöglicht, um Spalten als gelöscht oder umbenannt zu markieren, ohne dass Datendateien neu geschrieben werden müssen.

Azure Databricks unterstützt die Spaltenzuordnung für Delta Lake-Tabellen. Die Spaltenzuordnung ermöglicht nur Metadatenänderungen, um Spalten als gelöscht oder umbenannt zu markieren, ohne Datendateien neu zu schreiben. Die Spaltenzuordnung ermöglicht Ihnen auch die Verwendung von Zeichen, die Parquet in Spaltennamen nicht zulässt, z. B. Leerzeichen. Auf diese Weise können Sie CSV- oder JSON-Daten direkt in Delta aufnehmen, ohne Spalten umzubenennen.

Voraussetzungen und Einschränkungen

Bevor Sie die Spaltenzuordnung aktivieren, verstehen Sie die folgenden Einschränkungen:

Aktivieren der Spaltenzuordnung

Verwenden Sie den folgenden Befehl, um die Spaltenzuordnung zu aktivieren:

ALTER TABLE <table-name> SET TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name'
)

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

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

Siehe Delta Lake Featurekompatibilität und Protokolle.

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 Aktualisieren des Tabellenschemas.

Spalten entfernen

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, ...)

Weitere Informationen finden Sie unter Aktualisieren des Tabellenschemas.

Unterstützte Zeichen in Spaltennamen

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

Entfernen der Spaltenzuordnung

Mithilfe des folgenden Befehls können Sie die Spaltenzuordnung aus einer Tabelle entfernen:

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')

Warnung

Durch das Entfernen der Spaltenzuordnung werden alle Datendateien neu geschrieben, um physische Spaltennamen durch logische Namen zu ersetzen. Dieser Vorgang unterstützt keine Konfliktlösung auf Zeilenebene oder physischer Ebene.

Gleichzeitige Schreiboperationen verursachen eine ConcurrentModificationException. Vor dem Entfernen der Spaltenzuordnung:

  1. Halten Sie alle parallelen Schreibvorgänge an, einschließlich Streaming-Jobs und ETL-Pipelines.
  2. Deaktivieren Sie die Vorhersageoptimierung in der Tabelle.
  3. Planen Sie diesen Vorgang für große Tabellen während der Perioden mit niedriger Aktivität.

Eine alternative Methode, die das Downgrading des Tabellenprotokolls unterstützt, finden Sie unter Deaktivieren der Spaltenzuordnung.

Deaktivieren der Spaltenzuordnung

In Databricks Runtime 15.3 und höher können Sie den DROP FEATURE Befehl verwenden, um die Spaltenzuordnung zu entfernen und das Tabellenprotokoll nach unten zu aktualisieren. Verwenden Sie diesen Ansatz, anstatt die Spaltenzuordnung zu entfernen , wenn Sie die Protokollversionen aus Gründen der Kompatibilität mit älteren Lesern downgraden müssen.

Wichtig

Durch das Ablegen der Spaltenzuordnung aus einer Tabelle werden die zufälligen Präfixe, die in Verzeichnisnamen für partitionierte Tabellen verwendet werden, nicht entfernt.

Weitere Informationen finden Sie unter Löschen eines Delta Lake-Tabellenfeatures und Herabstufen des Tabellenprotokolls.

Spaltenzuordnung und Streaming

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, bei dem nicht-additive Schemaänderungen zu fehlerhaften Datenströmen führen könnten.

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. Für Streamingworkloads, die Daten aus mehreren Delta-Quelltabellen kombinieren, müssen Sie eindeutige Verzeichnisse innerhalb der checkpointLocation einzelnen Quelltabellen angeben.

Aktivieren der Spaltenzuordnung für einen laufenden Auftrag

Wichtig

So aktivieren Sie die Spaltenzuordnung für einen ausgeführten Streamingauftrag:

  1. Auftrag stoppen
  2. Aktivieren der Spaltenzuordnung in der Tabelle
  3. Starten Sie den Auftrag neu (erster Neustart - initialisiert die Spaltenzuordnung)
  4. Starten Sie den Auftrag erneut neu (zweiter Neustart – aktiviert Schemaänderungen)

Alle weiteren Schemaänderungen (Hinzufügen oder Ablegen von Spalten, Ändern von Spaltentypen) erfordern auch einen Neustart des Auftrags.

Ort der Schemaüberwachung angeben

Das folgende Beispiel zeigt, wie Sie einen schemaTrackingLocation Streaming-Lesevorgang aus einer Delta-Tabelle mit Spaltenzuordnung angeben:

checkpoint_path = "/path/to/checkpointLocation"

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

Nächste Schritte