Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azure Databricks a Delta Lake-táblák írási sémájának kényszerítésével ellenőrzi az adatminőséget. A sémakényszerítés nem vonatkozik a nem Delta formátumot használó táblákra, például a felhőbeli tárolóban lévő CSV- vagy JSON-fájlokra.
Séma érvényesítése az INSERT műveletekhez
Az Azure Databricks a következő szabályokat kényszeríti ki, amikor adatokat szúr be egy táblába:
- A céltáblában minden beszúrt oszlopnak léteznie kell.
- Minden oszlopadattípusnak meg kell egyeznie a céltáblában szereplő oszlopadattípusokkal.
Jegyzet
Az Azure Databricks megpróbálja biztonságosan átkonvertálni az oszlop adattípusait a céltáblához igazodva.
INSERT Példák
A céltáblában nem létező oszlopot tartalmazó sor beszúrása például meghiúsul:
-- Fails: unknown_column does not exist in target_table
INSERT INTO catalog.schema.target_table (id, unknown_column) VALUES (1, 'value');
A kompatibilis típusjelekkel való beszúrás sikeres:
-- Succeeds: integer 42 is safely cast to BIGINT
INSERT INTO catalog.schema.target_table (id, bigint_column) VALUES (1, 42);
Sémaérvényesítés a(z) MERGE műveletekhez
Az Azure Databricks az alábbi szabályokat kényszeríti ki az adatok MERGE művelet részeként történő beszúrásakor vagy frissítésekor:
- Ha a forrásutasítás adattípusa nem egyezik meg a céloszloptal,
MERGEmegpróbálja biztonságosan leadni az oszlop adattípusokat a céltáblának megfelelően. - Egy
UPDATEvagyINSERTművelet céloszlopainak létezniük kell a céltáblában. -
INSERT *vagyUPDATE SET *használatakor:- A forrásadatkészletnek tartalmaznia kell a céltáblában található összes oszlopot.
- A kényszerítés figyelmen kívül hagyja a forrásadatkészlet azon oszlopait, amelyek nem szerepelnek a céltáblában.
MERGE Példák
A következők MERGE például meghiúsulnak, mert a lekérdezés megpróbál beszúrni egy értéket unknown_column, amely nem létezik a következőben target_table:
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);
Egy másik példában tegyük fel, hogy a(z) target_table oszlopai id és name, a(z) source_table pedig id-vel, name-tel és extra_col-tal rendelkezik. Az alábbi MERGE, amely a(z) INSERT * használja, figyelmen kívül hagyja a forrásban lévő extra_col elemet, és sikeresen lefut, mert az összes céloszlop megtalálható a forrásban:
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 *;
Táblaséma módosítása
A táblázat sémáját explicit ALTER TABLE utasításokkal vagy automatikus sémafejlődéssel frissítheti. Lásd: Táblaséma frissítése sémafejlődéssel.
Például egy oszlop explicit hozzáadásához:
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;
Ha engedélyezni szeretné az automatikus sémafejlődést egy írási művelethez, állítsa be a mergeSchema következő beállítást:
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")
A sémafejlődés speciális szemantikával rendelkezik a INSERT és MERGE műveletekhez. Lásd: Sémafejlődés engedélyezése.
Külső táblák
Ha egy külső tábla metaadatait közvetlenül Azure Databricks kívüli külső ügyfelekkel módosítja, vagy útvonalalapú hozzáféréssel, a Unity Catalog nem szinkronizálja automatikusan a frissítéseket a sémába. Ez megakadályozhatja a sémakényszerítés helyes alkalmazását.
Futtassa MSCK REPAIR TABLE <table-name> SYNC METADATA a sémát a Unity Catalogtal való szinkronizálásához. Lásd a(z) REPAIR TABLE.