Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Tabellen mit aktivierter Spaltenzuordnung können nur in Databricks Runtime 10.4 LTS und höher gelesen werden.
- Das Aktivieren der Spaltenzuordnung kann unter Umständen unterbrechen:
- Veraltete Arbeitslasten, die auf Verzeichnisnamen zum Lesen von Delta-Tabellen basieren. Partitionierte Tabellen mit Spaltenzuordnung verwenden zufällige Präfixe anstelle von Spaltennamen für Partitionsverzeichnisse. Sehen Sie sich an: Teilen Delta Lake und Parquet Partitionierungsstrategien?.
- Nachgeschaltete Vorgänge mit Delta-Änderungsdatenfeed. Siehe Ändern von Datenfeedeinschränkungen für Tabellen mit Spaltenzuordnung.
- Streaming liest aus der Delta-Tabelle, einschließlich in Lakeflow Spark Declarative Pipelines. Siehe Spaltenzuordnung und Streaming.
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:
- Halten Sie alle parallelen Schreibvorgänge an, einschließlich Streaming-Jobs und ETL-Pipelines.
- Deaktivieren Sie die Vorhersageoptimierung in der Tabelle.
- 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:
- Auftrag stoppen
- Aktivieren der Spaltenzuordnung in der Tabelle
- Starten Sie den Auftrag neu (erster Neustart - initialisiert die Spaltenzuordnung)
- 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")
)