Beperkingen voor Azure Databricks
Azure Databricks biedt ondersteuning voor standaard SQL constraint-beheerclausules. Beperkingen kunnen in twee categorieën worden onderverdeeld:
- Afgedwongen constraints zorgen ervoor dat de kwaliteit en integriteit van gegevens die aan een table worden toegevoegd, automatisch worden gecontroleerd.
- Informatieve primaire sleutel- en vreemde sleutelbeperkingen coderen relaties tussen velden in tables, maar worden niet afgedwongen.
Voor alle beperkingen voor Azure Databricks is Delta Lake vereist.
Delta Live Tables heeft een vergelijkbaar concept dat bekend staat als verwachtingen. Zie Gegevenskwaliteit beheren met Delta Live Tables.
Afgedwongen beperkingen voor Azure Databricks
Wanneer een constraint wordt geschonden, mislukt de transactie met een fout. Er worden twee typen beperkingen ondersteund:
-
NOT NULL
: geeft aan dat values in specifieke columns niet null mag zijn. -
CHECK
: geeft aan dat een opgegeven booleaanse expressie waar moet zijn voor elke invoerrij.
Belangrijk
Als u een constraint toevoegt, wordt de table writer-protocolversie automatisch bijgewerkt als de vorige writer-versie kleiner was dan 3. Zie Hoe beheert Azure Databricks de compatibiliteit van Delta Lake-functies? om inzicht te hebben in table protocolversie en wat het betekent om de protocolversie bij te werken.
Set een NOT NULL
constraint in Azure Databricks
U geeft NOT NULL
beperkingen op in de schema wanneer u een tablemaakt. U kunt beperkingen verwijderen of toevoegen NOT NULL
met behulp van de ALTER TABLE ALTER COLUMN
opdracht.
CREATE TABLE people10m (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;
Voordat u een NOT NULL
constraint toevoegt aan een table, controleert Azure Databricks of alle bestaande rijen voldoen aan de constraint.
Als u een NOT NULL
constraint opgeeft op een column die in een struct genest is, moet de ouderstruct ook niet null zijn.
Columns genest binnen matrix- of kaarttypen accepteert geen NOT NULL
beperkingen.
Zie CREATE TABLE [USING] en ALTER TABLE ALTER COLUMN.
Set een CHECK
constraint in Azure Databricks
U beheert CHECK
beperkingen met behulp van de ALTER TABLE ADD CONSTRAINT
en ALTER TABLE DROP CONSTRAINT
opdrachten.
ALTER TABLE ADD CONSTRAINT
controleert of alle bestaande rijen voldoen aan de constraint voordat u deze toevoegt aan de table.
CREATE TABLE people10m (
id INT,
firstName STRING,
middleName STRING,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m DROP CONSTRAINT dateWithinRange;
Zie ALTER TABLE ADD CONSTRAINT en ALTER TABLE DROP CONSTRAINT.
CHECK
beperkingen worden weergegeven als table eigenschappen in de uitvoer van de opdrachten DESCRIBE DETAIL
en SHOW TBLPROPERTIES
.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Controlebeperkingen uitschakelen
In Databricks Runtime 15.4 LTS en hoger kunt u de opdracht DROP FEATURE
gebruiken om beperkingen van een table te remove controleren en het table-protocol te downgraden.
Zie Delta-table-functiesverwijderen.
Relaties tussen primaire en refererende sleutels declareren
Notitie
- Beperkingen voor primaire sleutels en refererende sleutels zijn beschikbaar in Databricks Runtime 11.3 LTS en hoger en zijn volledig ALGEMEEN beschikbaar in Databricks Runtime 15.2 en hoger.
- Beperkingen voor primaire sleutels en vreemde sleutels vereisen Unity Catalog en Delta Lake.
U kunt relaties tussen primaire sleutels en vreemde sleutels gebruiken op velden in Unity Catalogtables. Primaire en refererende sleutels zijn alleen informatief en worden niet afgedwongen. Vreemde sleutels moeten verwijzen naar een primaire sleutel in een andere table.
U kunt primaire sleutels en vreemde sleutels declareren als onderdeel van de table specificatieclausule tijdens het maken van table. Deze component is niet toegestaan tijdens CTAS-instructies. U kunt ook beperkingen toevoegen aan bestaande tables.
CREATE TABLE T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE TABLE S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T);
U kunt een query opstellen voor information_schema
of gebruik maken van DESCRIBE
om details te get wat betreft hoe beperkingen worden toegepast op een bepaalde catalog.
Zie: