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.
Azure Databricks stellt die Datenqualität für Delta Lake-Tabellen durch Schemavalidierung beim Schreiben sicher. Die Schemaerzwingung gilt nicht für Tabellen mit Nicht-Delta-Formaten, z. B. CSV- oder JSON-Dateien im Cloudspeicher.
Durchsetzung des Schemas für INSERT Operationen
Azure Databricks erzwingt beim Einfügen von Daten in eine Tabelle die folgenden Regeln:
- Alle eingefügten Spalten müssen in der Zieltabelle vorhanden sein.
- Alle Spaltendatentypen müssen mit den Spaltendatentypen in der Zieltabelle übereinstimmen.
Anmerkung
Azure Databricks versucht, Spaltendatentypen sicher umzuwandeln, damit sie zur Zieltabelle passen.
INSERT Beispiele
Das Einfügen einer Zeile mit einer Spalte, die nicht in der Zieltabelle vorhanden ist, schlägt z. B. fehl:
-- Fails: unknown_column does not exist in target_table
INSERT INTO catalog.schema.target_table (id, unknown_column) VALUES (1, 'value');
Das Einfügen mit einem kompatiblen Typ ist erfolgreich:
-- Succeeds: integer 42 is safely cast to BIGINT
INSERT INTO catalog.schema.target_table (id, bigint_column) VALUES (1, 42);
Durchsetzung des Schemas für MERGE Operationen
Azure Databricks erzwingt beim Einfügen oder Aktualisieren von Daten im Rahmen eines MERGE Vorgangs die folgenden Regeln:
- Wenn der Datentyp in der Quell-Anweisung nicht mit der Zielspalte übereinstimmt, versucht
MERGE, Spaltendatentypen sicher zu umwandeln, um der Zieltabelle zu entsprechen. - Die Zielspalten einer
UPDATE- oderINSERT-Aktion müssen in der Zieltabelle vorhanden sein. - Bei Verwendung
INSERT *oderUPDATE SET *:- Das Quell-Dataset muss alle Spalten in der Zieltabelle enthalten.
- Die Durchsetzung ignoriert Spalten im Quelldatensatz, die in der Zieltabelle nicht vorhanden sind.
MERGE Beispiele
Zum Beispiel schlägt das folgende MERGE fehl, weil die Abfrage versucht, einen Wert in unknown_column einzufügen, das in target_table nicht vorhanden ist:
MERGE INTO catalog.schema.target_table AS t
USING catalog.schema.source_table AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET t.unknown_column = s.value
WHEN NOT MATCHED THEN INSERT (id, unknown_column) VALUES (s.id, s.value);
In einem anderen Beispiel wird davon ausgegangen, dass target_table die Spalten id und name hat und source_tableid, name und extra_col hat. Die folgende Verwendung von MERGE mit INSERT * ignoriert extra_col in der Quelle und ist erfolgreich, da alle Zielspalten in der Quelle vorhanden sind:
MERGE INTO catalog.schema.target_table AS t
USING catalog.schema.source_table AS s
ON t.id = s.id
WHEN NOT MATCHED THEN INSERT *;
Ändern eines Tabellenschemas
Sie können das Schema einer Tabelle mithilfe expliziter ALTER TABLE Anweisungen oder der automatischen Schemaentwicklung aktualisieren. Siehe Aktualisieren von Tabellenschemas mit Schemaentwicklung.
So fügen Sie beispielsweise eine Spalte explizit hinzu:
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;
Um die automatische Schemaentwicklung für einen Schreibvorgang zu aktivieren, legen Sie die mergeSchema Option fest:
SQL
SET spark.databricks.delta.schema.autoMerge.enabled = true;
INSERT INTO catalog.schema.table_name SELECT * FROM source_table;
Python
df.write.option("mergeSchema", "true").mode("append").saveAsTable("catalog.schema.table_name")
Die Schemaentwicklung verfügt über spezielle Semantik für INSERT und MERGE Vorgänge. Siehe Aktivieren der Schemaentwicklung.
Externe Tabellen
Wenn Sie die Metadaten einer externen Tabelle direkt mit externen Clients außerhalb Azure Databricks oder mithilfe des pfadbasierten Zugriffs ändern, synchronisiert Unity Catalog keine Aktualisierungen automatisch mit dem Schema. Dies könnte verhindern, dass das Schema korrekt durchgesetzt wird.
Führen Sie MSCK REPAIR TABLE <table-name> SYNC METADATA aus, um das Schema mit Unity Catalog zu synchronisieren. Siehe REPAIR TABLE.