Clausola ADD CONSTRAINT
Si applica a: Databricks SQL Databricks Runtime
Aggiunge una chiave primaria informativa, una chiave esterna informativa o un vincolo check applicato a una tabella Delta Lake esistente.
Sintassi
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition ) [ ENFORCED ]
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_table [ ( 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_constraint
Definisce un vincolo CHECK per una tabella Delta Lake.
CONSTRAINT
nameSpecifica un nome per il vincolo. Il nome deve essere univoco all'interno della tabella. Se non viene specificato alcun nome per un vincolo
FOREIGN KEY
oPRIMARY KEY
, Azure Databricks ne genererà uno.CHECK (
condition)
condition
deve essere un'espressione deterministica che restituisce un oggettoBOOLEAN
.condition
può essere composto da valori letterali, identificatori di colonna all'interno della tabella e funzioni SQL predefinite o operatori, ad eccezione di:- Funzioni di aggregazione
- Funzioni di finestra analitica
- Funzioni della finestra di classificazione
- Funzioni generatore con valori di tabella
Inoltre,
condition
non deve contenere alcuna sottoquery.Affinché un
CHECK
vincolo venga 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_constraint
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Si applica a: Databricks SQL Databricks Runtime 11.3 LTS e versioni successive
Definisce una chiave primaria informativa o un vincolo di chiave esterna informativa per una tabella Delta Lake.
CONSTRAINT
nameFacoltativamente, 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: solo catalogo Unity
Aggiunge un vincolo di chiave primaria alla tabella Delta Lake. Una tabella può avere al massimo una chiave primaria.
I vincoli di chiave primaria non sono supportati per le tabelle nel
hive_metastore
catalogo.-
Colonna della tabella oggetto definita come
NOT NULL
. I nomi delle colonne non devono essere ripetuti. TIMESERIES
Si applica a: Databricks SQL Databricks Runtime 13.3 LTS e versioni successive
Facoltativamente, etichetta il componente della colonna chiave primaria come che rappresenta un timeeries.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Si applica a: solo catalogo Unity
Aggiunge un vincolo di chiave esterna (integrità referenziale) alla tabella Delta Lake.
I vincoli di chiave esterna non sono supportati per le tabelle nel
hive_metastore
catalogo.-
Colonna della tabella dell'oggetto. I nomi delle colonne non devono essere ripetuti. Il tipo di dati di ogni colonna deve corrispondere al tipo dell'oggetto corrispondente
parent_column
. 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 tabella a cui fa riferimento la chiave esterna. La tabella deve avere un vincolo definito
PRIMARY KEY
ed è necessario disporre delSELECT
privilegio per la tabella. -
Colonna nella tabella padre che fa parte della chiave primaria. Tutte le colonne chiave primaria della tabella padre devono essere elencate.
Se le colonne padre non sono elencate, sono implicite da specificare nell'ordine specificato nella
PRIMARY KEY
definizione.
Non sono consentiti vincoli di chiave esterna che differiscono solo per la permutazione delle colonne di chiave esterna.
-
constraint_option
Elenca le proprietà dei vincoli. Tutte le proprietà sono facoltative, ma implicite per impostazione predefinita. Ogni proprietà può essere specificata al massimo una volta.
NOT ENFORCED
Azure Databricks non esegue alcuna azione per applicarla per le righe nuove o esistenti.
DEFERRABLE
L'imposizione del vincolo può essere posticipata.
INITIALLY DEFERRED
L'imposizione dei vincoli viene posticipata.
NORELY
oppureRELY
Si applica a: Databricks SQL Databricks Runtime 14.2 e versioni successive per
PRIMARY KEY
i vincoliSi applica a: Databricks SQL Databricks Runtime 15.4 e versioni successive per vincoli
FOREIGN KEY
Se
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_option
Elenca 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 FULL
Affinché il vincolo sia considerato true, tutti i valori di colonna devono essere
NOT NULL
.ON UPDATE NO ACTION
Se l'elemento padre
PRIMARY KEY
viene aggiornato, Azure Databricks non esegue alcuna azione per limitare l'aggiornamento o aggiornare la chiave esterna.ON DELETE NO ACTION
Se 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);