Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure Databricks validerar datakvaliteten genom att framtvinga schema vid skrivning för Delta Lake-tabeller. Schematillämpning gäller inte för tabeller som använder icke-Delta-format, till exempel CSV- eller JSON-filer i molnlagring.
Schematillämpning för INSERT åtgärder
Azure Databricks tillämpar följande regler när data infogas i en tabell:
- Alla infogade kolumner måste finnas i måltabellen.
- Alla kolumndatatyper måste matcha kolumndatatyperna i måltabellen.
Notera
Azure Databricks försöker på ett säkert sätt omvandla kolumndatatyper så att de matchar måltabellen.
INSERT exempel
Följande exempel skriver till en hanterad Delta Lake-tabell med namnet enforce_demo. För att skapa den, kör följande:
CREATE OR REPLACE TABLE main.default.enforce_demo (id INT, name STRING, amount BIGINT);
Följande INSERT misslyckas eftersom unknown_column inte existerar i enforce_demo. Azure Databricks returnerar ett UNRESOLVED_COLUMN.WITH_SUGGESTION fel (SQLSTATE 42703) som antyder de giltiga kolumnnamnen:
INSERT INTO main.default.enforce_demo (id, unknown_column) VALUES (1, 'value');
Följande INSERT lyckas. Azure Databricks konverterar säkert heltalet 42 till typen BIGINT för kolumnen amount:
INSERT INTO main.default.enforce_demo (id, amount) VALUES (1, 42);
Schematillämpning för MERGE åtgärder
Azure Databricks tillämpar följande regler när du infogar eller uppdaterar data som en del av en MERGE åtgärd:
- Om datatypen i källutsatsen inte matchar målkolumnen försöker
MERGEpå ett säkert sätt omvandla kolumndatatyper så att de matchar måltabellen. - Målkolumnerna för en
UPDATEellerINSERT-åtgärd måste finnas i måltabellen. - När du använder
INSERT *ellerUPDATE SET *:- Källdatauppsättningen måste ha alla kolumner som finns i måltabellen.
- Tvingande ignorerar kolumner i källdatauppsättningen som inte finns i måltabellen.
MERGE exempel
Följande exempel återanvänder enforce_demo tabellen från föregående avsnitt, tillsammans med en källtabell med namn enforce_source som har en extra kolumn. För att skapa källtabellen, kör följande:
CREATE OR REPLACE TABLE main.default.enforce_source (id INT, name STRING, amount BIGINT, extra_col STRING);
INSERT INTO main.default.enforce_source VALUES (1, 'Alice', 100, 'x'), (2, 'Bob', 200, 'y');
Följande MERGE misslyckas eftersom den tilldelar till unknown_column, vilket inte existerar i enforce_demo. Azure Databricks returnerar ett DELTA_MERGE_UNRESOLVED_EXPRESSION fel som namnger de kolumner den kan lösa:
MERGE INTO main.default.enforce_demo AS t
USING main.default.enforce_source AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET t.unknown_column = s.name
WHEN NOT MATCHED THEN INSERT (id, unknown_column) VALUES (s.id, s.name);
Tabellen enforce_source innehåller en extra_col kolumn som enforce_demo inte har. Följande MERGE med INSERT * lyckas eftersom källan innehåller alla målkolumner. Tillsyn ignorerar:extra_col
MERGE INTO main.default.enforce_demo AS t
USING main.default.enforce_source AS s
ON t.id = s.id
WHEN NOT MATCHED THEN INSERT *;
Ändra ett tabellschema
Du kan uppdatera schemat för en tabell med explicita ALTER TABLE instruktioner eller automatisk schemautveckling. Se Uppdatera tabellscheman med schemautveckling.
Om du till exempel vill lägga till en kolumn explicit:
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;
Om du vill aktivera automatisk schemautveckling för en skrivåtgärd anger du alternativet mergeSchema :
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")
Schemautveckling har en särskild semantik för INSERT och MERGE åtgärder. Se Aktivera schemautveckling.
Externa tabeller
Om du ändrar metadata för en extern tabell direkt med externa klienter utanför Azure Databricks eller med hjälp av sökvägsbaserad åtkomst synkroniserar Unity Catalog inte automatiskt uppdateringar av schemat. Detta kan förhindra att schematillämpningen tillämpas korrekt.
Kör MSCK REPAIR TABLE <table-name> SYNC METADATA för att synkronisera schemat med Unity Catalog. Se även REPAIR TABLE.