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.
Si applica a:
Databricks SQL
Databricks Runtime
Aggiunge una chiave primaria informativa, una chiave esterna informativa o un vincolo check imposto a una tabella Delta Lake esistente.
Sintassi
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition )
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_relation [ ( parent_column [, ...] ] )
[ constraint_option | foreign_key_option ] [...]
}
}
constraint_option
{ NOT ENFORCED |
DEFERRABLE |
INITIALLY DEFERRED |
{ NORELY | RELY } }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
Per la compatibilità con i dialetti SQL non standard, è possibile specificare ENABLE NOVALIDATE anziché NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.
Parametri
check_constraintDefinisce un vincolo di controllo per una relazione.
CONSTRAINTnomeSpecifica un nome per il vincolo. Il nome deve essere univoco all'interno della relazione.
CHECK (condizione)L'oggetto
DEFAULT COLLATIONdella relazione deve essereUTF8_BINARYal momento dell'aggiunta del vincolo.conditiondeve essere un'espressione deterministica che restituisce un oggettoBOOLEAN.conditionpuò essere costituito da valori letterali, identificatori di colonna all'interno della relazione e funzioni o operatori SQL predefiniti, ad eccezione di:- Funzioni di aggregazione
- funzioni della finestra analitica
- funzioni di finestra di classifica
- Funzioni generatrici con valori tabulari
-
STRINGcolonne con regole di confronto diverse daUTF8_BINARY
Inoltre,
conditionnon deve contenere alcuna sottoquery.Affinché un vincolo di
CHECKvenga soddisfatto in Azure Databricks, deve restituiretrue.Delta Lake verifica la validità del vincolo CHECK sia per i dati nuovi che per i dati esistenti. Se una riga esistente viola il vincolo, verrà generato un errore.
key_constraintImportante
Questa funzionalità è disponibile in anteprima pubblica.
Si applica a:
Databricks SQL
Databricks Runtime 11.3 LTS e versioni successiveDefinisce una chiave primaria informativa o un vincolo di chiave esterna informativa per una relazione. I vincoli di chiave informativa non vengono applicati, ma possono migliorare le prestazioni supportando le ottimizzazioni delle query .
CONSTRAINTnomeFacoltativamente, specifica un nome per il vincolo. Il nome deve essere univoco all'interno dello schema. Se non viene specificato alcun nome, Azure Databricks ne genererà uno.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]Si applica a:
Catalogo UnityAggiunge un vincolo di chiave primaria alla relazione. Una relazione può avere al massimo una chiave primaria.
I vincoli di chiave primaria non sono supportati per le relazioni nel
hive_metastorecatalogo.-
Colonna della relazione oggetto definita come
NOT NULL. I nomi delle colonne non devono essere ripetuti. TIMESERIESSi applica a:
Databricks SQL
Databricks Runtime 13.3 LTS e versioni successiveFacoltativamente, etichetta il componente della colonna chiave primaria come rappresentante una timeseries.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_relation [ ( parent_column [, ...] ) ] foreign_key_optionSi applica a:
Catalogo UnityAggiunge un vincolo di chiave esterna (integrità referenziale) alla relazione.
I vincoli di chiave esterna non sono supportati per le relazioni nel
hive_metastorecatalogo.-
Colonna della relazione del soggetto. I nomi delle colonne non devono essere ripetuti. Il tipo di dati di ogni colonna deve corrispondere al tipo di
parent_columncorrispondente. Il numero di colonne deve corrispondere al numero diparent_columns. Due chiavi esterne non possono condividere un set identico di colonne chiave esterna. -
Specifica la relazione a cui fa riferimento la chiave esterna. La relazione deve avere un vincolo definito
PRIMARY KEYed è necessario disporre delSELECTprivilegio per la relazione. -
Una colonna nella relazione principale che è parte della sua chiave primaria. Tutte le colonne chiave primarie della relazione principale devono essere elencate.
Se le colonne padre non sono elencate, si considera che siano specificate nell'ordine dato nella definizione di
PRIMARY KEY.
Non sono consentiti vincoli di chiave esterna che differiscono solo per la permutazione delle colonne di chiave esterna.
-
constraint_optionElenca le proprietà dei vincoli. Tutte le proprietà sono facoltative, ma implicite per impostazione predefinita. Ogni proprietà può essere specificata al massimo una volta.
NOT ENFORCEDAzure Databricks non esegue alcuna azione per applicarla per le righe nuove o esistenti.
DEFERRABLEL'imposizione del vincolo può essere posticipata.
INITIALLY DEFERREDL'imposizione dei vincoli viene posticipata.
NORELYoppureRELYSi applica a:
Databricks SQL
Databricks Runtime 14.2 e versioni successive per PRIMARY KEYi vincoliSi applica a:
Databricks SQL
Databricks Runtime 15.4 e versioni successive per vincoli FOREIGN KEYSe
RELY, Azure Databricks può sfruttare il vincolo per riscrivere le query. È responsabilità dell'utente assicurarsi che il vincolo sia soddisfatto. L'uso di un vincolo non soddisfatto può causare risultati di query non corretti.Il valore predefinito è
NORELY.
foreign_key_optionElenca le proprietà specifiche dei vincoli di chiave esterna. Tutte le proprietà sono facoltative, ma implicite per impostazione predefinita. Ogni proprietà può essere specificata al massimo una volta.
MATCH FULLAffinché il vincolo venga considerato true, tutti i valori di colonna devono essere
NOT NULL.ON UPDATE NO ACTIONSe il
PRIMARY KEYpadre viene aggiornato, Azure Databricks non esegue alcuna azione per limitare l'aggiornamento o aggiornare la chiave esterna.ON DELETE NO ACTIONSe la riga padre viene eliminata, Azure Databricks non esegue alcuna azione per limitare l'azione, aggiornare la chiave esterna o eliminare la riga dipendente.
Importante
Azure Databricks non applica vincoli di chiave primaria o di chiave esterna. Confermare i vincoli di chiave prima di aggiungere una chiave primaria o esterna. Il processo di inserimento può fornire tale garanzia oppure eseguire controlli sui dati.
Esempi
-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);
-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
NOT ENFORCED RELY;
-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);