ADD CONSTRAINT-clausule
Van toepassing op: Databricks SQL
Databricks Runtime
Voegt een informatieve primaire sleutel, informatieve vreemde sleutel of een afgedwongen controle-constraint toe aan een bestaande Delta Lake-tabel.
Syntaxis
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 }
Voor compatibiliteit met niet-standaard SQL-dialecten kunt u opgeven ENABLE NOVALIDATE
in plaats van NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parameters
check_constraint
Hiermee definieert u een controlebeperking voor een Delta Lake-tabel.
CONSTRAINT
nameHiermee geeft u een naam voor de beperking. De naam moet uniek zijn in de tabel. Als er geen naam is opgegeven voor een
FOREIGN KEY
ofPRIMARY KEY
beperking, genereert Azure Databricks er een.CHECK (
voorwaarde)
condition
moet een deterministische expressie zijn die eenBOOLEAN
.condition
kan bestaan uit letterlijke waarden, kolom-id's in de tabel en deterministische, ingebouwde SQL-functies of -operators, met uitzondering van:- Statistische functies
- Analysevensterfuncties
- Rangschikking vensterfuncties
- Generatorfuncties met tabelwaarde
Mag ook
condition
geen subquery bevatten.Om aan een
CHECK
beperking te voldoen in Azure Databricks, moet deze gelijk zijn aantrue
.Delta Lake controleert de geldigheid van de controlebeperking op zowel nieuwe als bestaande gegevens. Als een bestaande rij de beperking schendt, wordt er een fout gemeld.
key_constraint
Belangrijk
Deze functie is beschikbaar als openbare preview.
Van toepassing op:
Databricks SQL
Databricks Runtime 11.3 LTS en hoger
Hiermee definieert u een informatie primaire sleutel of informatie referentiële sleutelbeperking voor een Delta Lake-tabel.
CONSTRAINT
nameHiermee geeft u desgewenst een naam op voor de beperking. De naam moet uniek zijn binnen het schema. Als er geen naam is opgegeven, genereert Azure Databricks er een.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
Van toepassing op:
alleen Unity Catalog
Hiermee voegt u een primaire-sleutelbeperking toe aan de Delta Lake-tabel. Een tabel kan maximaal één primaire sleutel hebben.
Primaire-sleutelbeperkingen worden niet ondersteund voor tabellen in de
hive_metastore
catalogus.-
Een kolom van de onderwerptabel die is gedefinieerd als
NOT NULL
. Kolomnamen mogen niet worden herhaald. TIMESERIES
Van toepassing op:
Databricks SQL
Databricks Runtime 13.3 LTS en hoger
U kunt desgewenst het primaire-sleutelkolomonderdeel labelen als een tijdreeks.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Van toepassing op:
alleen Unity Catalog
Hiermee voegt u een externe sleutelbeperking (referentiële integriteit) toe aan de Delta Lake tabel.
Beperkingen voor foreign keys worden niet ondersteund voor tabellen in de catalogus
hive_metastore
.-
Een kolom van de onderwerptabel. Kolomnamen mogen niet worden herhaald. Het gegevenstype van elke kolom moet overeenkomen met het type overeenkomende
parent_column
. Het aantal kolommen moet overeenkomen met het aantalparent_columns
. Twee vreemde sleutels kunnen geen identieke set vreemde-sleutelkolommen delen. -
Hiermee geeft u de tabel aan waarnaar de vreemde sleutel verwijst. De tabel moet een gedefinieerde
PRIMARY KEY
beperking hebben en u moet de bevoegdheidSELECT
voor de tabel hebben. -
Een kolom in de bovenliggende tabel die deel uitmaakt van de primaire sleutel. Alle primaire sleutelkolommen van de oudertabel moeten worden opgenomen.
Als bovenliggende kolommen niet worden vermeld, worden ze verondersteld in de volgorde te staan zoals gespecificeerd in de
PRIMARY KEY
-definitie.
Beperkingen voor vreemde sleutels die alleen verschillen in de volgorde van de vreemde sleutelkolommen zijn niet toegestaan.
-
constraint_option
Hiermee worden de eigenschappen van de beperkingen weergegeven. Alle eigenschappen zijn optioneel, maar worden standaard geïmpliceerd. Elke eigenschap kan maximaal eenmaal worden opgegeven.
NOT ENFORCED
Azure Databricks voert geen actie uit om deze af te dwingen voor bestaande of nieuwe rijen.
DEFERRABLE
De afdwinging van beperkingen kan worden uitgesteld.
INITIALLY DEFERRED
Afdwingen van beperkingen wordt uitgesteld.
NORELY
ofRELY
Van toepassing op:
Databricks SQL
Databricks Runtime 14.2 en hoger voor beperkingen
PRIMARY KEY
Van toepassing op:
Databricks SQL
Databricks Runtime 15.4 en hoger voor
FOREIGN KEY
beperkingenAls
RELY
, kan Azure Databricks gebruikmaken van de beperking om query's te herschrijven. Het is de verantwoordelijkheid van de gebruiker om ervoor te zorgen dat aan de beperking wordt voldaan. Als u afhankelijk bent van een beperking die niet is voldaan, kan dit leiden tot onjuiste queryresultaten.De standaardwaarde is
NORELY
.
foreign_key_option
Geeft een lijst van de eigenschappen die specifiek zijn voor beperkingen voor refererende sleutels. Alle eigenschappen zijn optioneel, maar worden standaard geïmpliceerd. Elke eigenschap kan maximaal eenmaal worden opgegeven.
MATCH FULL
Als de beperking als waar moet worden beschouwd, moeten alle kolomwaarden worden
NOT NULL
.ON UPDATE NO ACTION
Als de bovenliggende
PRIMARY KEY
wordt bijgewerkt, onderneemt Azure Databricks geen actie om de bijwerking te beperken of de vreemde sleutel bij te werken.ON DELETE NO ACTION
Als de bovenliggende rij wordt verwijderd, onderneemt Azure Databricks geen actie om de actie te beperken, de refererende sleutel bij te werken of de afhankelijke rij te verwijderen.
Belangrijk
Azure Databricks dwingt geen beperkingen voor primaire of refererende sleutels af. Bevestig sleutelbeperkingen voordat u een primaire of refererende sleutel toevoegt. Uw opnameproces kan dergelijke zekerheid bieden of u kunt controles uitvoeren op basis van uw gegevens.
Voorbeelden
-- 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);