Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure Databricks convalida la qualità dei dati applicando lo schema in scrittura per le tabelle Delta Lake. L'imposizione dello schema non si applica alle tabelle usando formati non Delta, ad esempio file CSV o JSON nell'archiviazione cloud.
Applicazione dello schema per le operazioni INSERT
Azure Databricks applica le regole seguenti quando si inseriscono dati in una tabella:
- Tutte le colonne inserite devono esistere nella tabella di destinazione.
- Tutti i tipi di dati della colonna devono corrispondere ai tipi di dati della colonna nella tabella di destinazione.
Nota
Azure Databricks prova a eseguire il cast sicuro dei tipi di dati delle colonne affinché corrispondano alla tabella di destinazione.
INSERT esempi
I seguenti esempi scrivono su una tabella gestita del Delta Lake chiamata enforce_demo. Per crearlo, esegui quanto segue:
CREATE OR REPLACE TABLE main.default.enforce_demo (id INT, name STRING, amount BIGINT);
Il seguente INSERT fallisce perché unknown_column non esiste in enforce_demo. Azure Databricks restituisce un UNRESOLVED_COLUMN.WITH_SUGGESTION errore (SQLSTATE 42703) che suggerisce i nomi validi delle colonne:
INSERT INTO main.default.enforce_demo (id, unknown_column) VALUES (1, 'value');
Il seguente INSERT ha successo. Azure Databricks converte in modo sicuro l'intero 42 nel tipo BIGINT della colonna amount:
INSERT INTO main.default.enforce_demo (id, amount) VALUES (1, 42);
Applicazione dello schema per le operazioni MERGE
Azure Databricks applica le regole seguenti durante l'inserimento o l'aggiornamento dei dati come parte di un'operazione di MERGE:
- Se il tipo di dati nell'istruzione di origine non corrisponde alla colonna di destinazione,
MERGEtenta di convertire in modo sicuro i tipi di dati delle colonne per farli corrispondere alla tabella di destinazione. - Le colonne di destinazione di un'azione
UPDATEoINSERTdevono esistere nella tabella di destinazione. - Quando si usa
INSERT *oUPDATE SET *:- Il set di dati di origine deve avere tutte le colonne presenti nella tabella di destinazione.
- L'applicazione ignora le colonne nel dataset di origine che non sono presenti nella tabella di destinazione.
MERGE esempi
I seguenti esempi riutilizzano la enforce_demo tabella della sezione precedente, insieme a una tabella sorgente chiamata enforce_source che ha una colonna extra. Per creare la tabella sorgente, esegui quanto segue:
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');
Il seguente MERGE fallisce perché assegna a unknown_column, che non esiste in enforce_demo. Azure Databricks restituisce un DELTA_MERGE_UNRESOLVED_EXPRESSION errore che nomina le colonne che può risolvere:
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);
La enforce_source tabella include una extra_col colonna che enforce_demo non ha. Il seguente MERGE con INSERT * ha successo perché la sorgente contiene ogni colonna target. L'applicazione ignora 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 *;
Modificare uno schema di tabella
È possibile aggiornare lo schema di una tabella usando istruzioni esplicite ALTER TABLE o l'evoluzione automatica dello schema. Vedere Aggiornare gli schemi di tabella con l'evoluzione dello schema.
Ad esempio, per aggiungere una colonna in modo esplicito:
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;
Per abilitare l'evoluzione automatica dello schema per un'operazione di scrittura, impostare l'opzione 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")
L'evoluzione dello schema ha una semantica speciale per INSERT e MERGE operazioni. Vedere Abilitare l'evoluzione dello schema.
Tabelle esterne
Se si modificano i metadati di una tabella esterna direttamente con client esterni all'Azure Databricks o usando l'accesso basato sul percorso, Unity Catalog non sincronizza automaticamente gli aggiornamenti allo schema. Ciò potrebbe impedire la corretta applicazione dei vincoli dello schema.
Eseguire MSCK REPAIR TABLE <table-name> SYNC METADATA per sincronizzare lo schema con Unity Catalog. Vedete REPAIR TABLE.