Restricciones en Azure Databricks
Azure Databricks admite cláusulas estándar de administración de restricciones SQL. Las restricciones se dividen en dos categorías:
- Las restricciones aplicadas aseguran la verificación automática de la calidad y de la integridad de los datos añadidos a una tabla.
- La clave principal informativa y las restricciones de clave externa codifican las relaciones entre los campos de las tablas y no se aplican.
Todas las restricciones de Azure Databricks requieren Delta Lake.
Delta Live Tables tiene un concepto similar conocido como expectativas. Consulte Administración de la calidad de los datos con Delta Live Tables.
Restricciones aplicadas en Azure Databricks
Cuando se infringe una restricción, se produce un error en la transacción. Se admiten dos tipos de restricciones:
NOT NULL
: indica que los valores de columnas específicas no pueden ser NULL.CHECK
: indica que una expresión booleana especificada debe ser true para cada fila de entrada.
Importante
Al agregar una restricción, se actualiza automáticamente la versión del protocolo de escritura de tablas si la versión del escritor anterior era inferior a 3. Consulte ¿Cómo administra Azure Databricks la compatibilidad de características de Delta Lake? para comprender el control de versiones del protocolo de tabla y qué significa actualizar la versión del protocolo.
Establecimiento de una restricción NOT NULL
en Azure Databricks
Las restricciones NOT NULL
se especifican en el esquema cuando se crea una tabla. Quite o agregue restricciones NOT NULL
mediante el comando ALTER TABLE ALTER COLUMN
.
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;
Antes de agregar una restricción NOT NULL
a una tabla, Azure Databricks comprueba que todas las filas actuales cumplan la restricción.
Si especifica una restricción NOT NULL
en una columna anidada dentro de una estructura, la estructura primaria no debe ser null. Las columnas anidadas dentro de los tipos ARRAY y MAP no aceptan restricciones NOT NULL
.
Consulte CREATE TABLE [USING] y ALTER TABLE ALTER COLUMN.
Establecimiento de una restricción CHECK
en Azure Databricks
Las restricciones CHECK
se administran con los comandos ALTER TABLE ADD CONSTRAINT
y ALTER TABLE DROP CONSTRAINT
. ALTER TABLE ADD CONSTRAINT
comprueba que todas las filas actuales satisfagan la restricción antes de agregarla a la tabla.
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;
Vea ALTER TABLE ADD CONSTRAINT y ALTER TABLE DROP CONSTRAINT.
Las restricciones CHECK
se muestran como propiedades de tabla en la salida de los comandos DESCRIBE DETAIL
y SHOW TBLPROPERTIES
.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Deshabilite las restricciones de comprobación
En Databricks Runtime 15.4 LTS y versiones posteriores, puede usar el comando DROP FEATURE
para quitar la restricciones de comprobación y cambiar a una versión anterior el protocolo de la tabla.
Consulte Eliminación de características de tablas Delta.
Declarar relaciones de clave principal y clave externa
Nota:
- Las restricciones de clave principal y clave externa están disponibles en Databricks Runtime 11.3 LTS y versiones posteriores, y están totalmente disponibles en Databricks Runtime 15.2 y versiones posteriores.
- Las restricciones de clave principal y clave externa requieren Unity Catalog y Delta Lake.
Puede usar las relaciones de clave principal y clave externa en los campos de las tablas del catálogo de Unity. Las claves principales y externas son solo informativas y no se aplican. Las claves externas deben hacer referencia a una clave principal en otra tabla.
Puede declarar claves principales y claves externas como parte de la cláusula de especificación de tabla durante la creación de la tabla. Esta cláusula no se permite durante las instrucciones CTAS. También puede agregar restricciones a las tablas existentes.
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);
Puede consultar information_schema
o usar DESCRIBE
para obtener detalles sobre cómo se aplican las restricciones en un catálogo determinado.
Vea: