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
Ad esempio, l'inserimento di una riga con una colonna che non esiste nella tabella di destinazione ha esito negativo:
-- Fails: unknown_column does not exist in target_table
INSERT INTO catalog.schema.target_table (id, unknown_column) VALUES (1, 'value');
L'inserimento con un cast di tipo compatibile ha esito positivo:
-- Succeeds: integer 42 is safely cast to BIGINT
INSERT INTO catalog.schema.target_table (id, bigint_column) VALUES (1, 42);
Convalida 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
Ad esempio, l'errore seguente MERGE non riesce perché la query tenta di inserire un valore in unknown_column, che non esiste in 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);
In un altro esempio si supponga che target_table contenga colonne id e namee source_table che abbia id, namee extra_col. Il seguente MERGE che usa INSERT * ignora extra_col nell'origine e ha esito positivo perché tutte le colonne di destinazione sono presenti nell'origine:
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 *;
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.