Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure Databricks weryfikuje jakość danych, wymuszając schemat zapisu dla tabel usługi Delta Lake. Wymuszanie schematu nie ma zastosowania do tabel korzystających z formatów innych niż Delta, takich jak pliki CSV lub JSON przechowywane w chmurze.
Wymuszanie zgodności ze schematem dla operacji INSERT
Usługa Azure Databricks wymusza następujące reguły podczas wstawiania danych do tabeli:
- Wszystkie wstawione kolumny muszą istnieć w tabeli docelowej.
- Wszystkie typy danych kolumn muszą być zgodne z typami danych kolumn w tabeli docelowej.
Notatka
Usługa Azure Databricks próbuje bezpiecznie rzutować typy danych w kolumnach, aby dopasować je do tabeli docelowej.
przykłady INSERT
Poniższe przykłady zapisują dane do zarządzanej tabeli Delta Lake o nazwie enforce_demo. Aby ją utworzyć, uruchom następujące polecenie:
CREATE OR REPLACE TABLE main.default.enforce_demo (id INT, name STRING, amount BIGINT);
Poniższe INSERT kończy się niepowodzeniem, ponieważ unknown_column nie istnieje w enforce_demo. Azure Databricks zwraca błąd UNRESOLVED_COLUMN.WITH_SUGGESTION (SQLSTATE 42703), który zawiera sugestie dotyczące prawidłowych nazw kolumn:
INSERT INTO main.default.enforce_demo (id, unknown_column) VALUES (1, 'value');
Poniższy INSERT kończy się powodzeniem. Azure Databricks bezpiecznie rzutuje liczbę całkowitą 42 na typ BIGINT kolumny amount:
INSERT INTO main.default.enforce_demo (id, amount) VALUES (1, 42);
Wymuszanie zgodności ze schematem dla operacji MERGE
Usługa Azure Databricks wymusza następujące reguły podczas wstawiania lub aktualizowania danych w ramach operacji MERGE:
- Jeśli typ danych w instrukcji źródłowej nie jest zgodny z kolumną docelową,
MERGEpróbuje bezpiecznie rzutować typy danych kolumn w celu dopasowania ich do tabeli docelowej. - Kolumny docelowe akcji
UPDATElubINSERTmuszą istnieć w tabeli docelowej. - Podczas używania
INSERT *lubUPDATE SET *:- Źródłowy zestaw danych musi zawierać wszystkie kolumny obecne w tabeli docelowej.
- Wymuszanie zgodności ignoruje kolumny w źródłowym zestawie danych, które nie występują w tabeli docelowej.
przykłady MERGE
Poniższe przykłady ponownie wykorzystują tabelę enforce_demo z poprzedniej sekcji, wraz z tabelą źródłową o nazwie enforce_source posiadającą dodatkową kolumnę. Aby utworzyć tabelę źródłową, uruchom następujące polecenie:
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');
Poniższe MERGE kończy się niepowodzeniem, ponieważ przypisuje wartość do unknown_column, które nie istnieje w enforce_demo. Azure Databricks zwraca błąd, DELTA_MERGE_UNRESOLVED_EXPRESSION który nazywa kolumny, które może rozwiązać:
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);
Tabela enforce_source zawiera kolumnę extra_col , która enforce_demo nie ma. Następujące MERGE z użyciem INSERT * kończy się powodzeniem, ponieważ źródło zawiera wszystkie kolumny docelowe. Egzekwowanie ignoruje 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 *;
Modyfikowanie schematu tabeli
Schemat tabeli można zaktualizować przy użyciu instrukcji jawnych ALTER TABLE lub automatycznej ewolucji schematu. Zobacz Aktualizowanie schematów tabeli przy użyciu ewolucji schematu.
Aby na przykład jawnie dodać kolumnę:
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;
Aby włączyć automatyczną ewolucję schematu dla operacji zapisu, ustaw mergeSchema opcję:
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")
Ewolucja schematu ma specjalną semantykę dla operacji INSERT i MERGE. Zobacz Włącz ewolucję schematu.
Tabele zewnętrzne
Jeśli modyfikujesz metadane tabeli zewnętrznej bezpośrednio za pomocą klientów zewnętrznych poza usługą Azure Databricks lub przy użyciu dostępu opartego na ścieżce, Unity Catalog nie synchronizuje automatycznie zmian schematu. Może to uniemożliwić prawidłowe egzekwowanie schematu.
Uruchom polecenie MSCK REPAIR TABLE <table-name> SYNC METADATA, aby zsynchronizować schemat z Unity Catalog. Zobacz: REPAIR TABLE.