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
) USING DELTA;

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
) USING DELTA;

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;

Declarar relaciones de clave principal y clave externa

Importante

Esta característica está en versión preliminar pública.

Nota:

  • Las restricciones de clave principal y clave externa están disponibles en Databricks Runtime 11.3 LTS 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: