Compartir a través de


Cláusula ADD CONSTRAINT

Se aplica a: casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Añade una clave principal informativa, una clave externa informativa o una restricción de comprobación obligatoria a una tabla de Delta Lake existente.

Sintaxis

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 }

Para la compatibilidad con dialectos no estándar de SQL, puede especificar ENABLE NOVALIDATE en lugar de NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parámetros

  • check_constraint

    Define una restricción de comprobación para una tabla de Delta Lake.

    • CONSTRAINTname

      Especifica un nombre para la restricción. El nombre debe ser único en la tabla. Si no se proporciona ningún nombre, Azure Databricks generará uno.

    • CHECK (condition)

      condition debe ser una expresión determinista que devuelva un valor BOOLEAN.

      condition puede estar compuesto por literales, identificadores de columna dentro de la tabla y funciones u operadores SQL integrados y deterministas, a excepción de lo siguiente:

      condition tampoco debe contener ninguna subconsulta.

      Para que se cumpla una restricción CHECK en Azure Databricks, debe evaluarse como true.

      Delta Lake comprueba la validez de la restricción de comprobación con los datos nuevos y existentes. Si alguna fila existente infringe la restricción, se producirá un error.

  • key_constraint

    Importante

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

    Se aplica a: casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 11.3 LTS y versiones posteriores

    Define una clave principal informativa o una clave externa informativa para una tabla de Delta Lake.

    • CONSTRAINTname

      Especifica un nombre opcional para la restricción. El nombre debe ser único dentro del esquema. Si no se proporciona ningún nombre, Azure Databricks generará uno.

    • PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]

      Se aplica a: casilla marcada como Sí solo Unity Catalog

      Agrega una restricción de clave principal a la tabla de Delta Lake. Una tabla puede tener como máximo una clave principal.

      Las restricciones de clave principal no se admiten para las tablas del catálogo hive_metastore.

    • key_column

      Columna de la tabla en cuestión definida como NOT NULL. Los nombres de columna no se deben repetir.

    • TIMESERIES

      Se aplica a: casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 13.3 LTS y versiones posteriores

      Opcionalmente, etiqueta el componente de columna de clave principal para indicar que representa una serie temporal.

    • FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option

      Se aplica a: casilla marcada como Sí solo Unity Catalog

      Agrega una restricción de clave externa (integridad referencial) a la tabla de Delta Lake.

      Las restricciones de clave externa no se admiten para las tablas del catálogo hive_metastore.

      • foreign_key_column

        Columna de la tabla en cuestión. Los nombres de columna no se deben repetir. El tipo de datos de cada columna debe coincidir con el tipo de la columna coincidente especificada como parent_column. El número de columnas debe coincidir con el número de apariciones de parent_columns. Dos claves externas no pueden compartir un conjunto idéntico de columnas de clave externa.

      • parent_table

        Especifica la tabla a la que hace referencia la clave externa. La tabla debe tener una restricción PRIMARY KEY definida y debe tener el privilegio SELECT en la tabla.

      • parent_column

        Columna de la tabla primaria que forma parte de su clave principal. Deben aparecer todas las columnas de la clave principal de la tabla primaria.

        Si no se enumeran las columnas primarias, se especifican de forma implícita según el orden determinado en la definición PRIMARY KEY.

      No se permiten restricciones de clave externa que solo difieren en la permutación de las columnas de la clave externa.

    • constraint_option

      Enumera las propiedades de las restricciones. Todas las propiedades son opcionales pero implícitas de manera predeterminada. Cada propiedad se puede especificar como máximo una vez.

      • NOT ENFORCED

        Azure Databricks no realiza ninguna acción para aplicarla a las filas existentes o nuevas.

      • DEFERRABLE

        La aplicación de las restricciones se puede aplazar.

      • INITIALLY DEFERRED

        Se aplaza la aplicación de las restricciones.

      • NORELY o RELY

        Se aplica a: casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime 14.2 y versiones posteriores para restricciones de PRIMARY KEY

        Se aplica a: casilla marcada como Sí Databricks Runtime 15.4 y versiones posteriores para restricciones de FOREIGN KEY

        Si RELY, Azure Databricks puede aprovechar la restricción para reescribir las consultas. Es responsabilidad del usuario asegurarse de que se cumple la restricción. Confiar en una restricción que no se cumple puede provocar resultados de consulta incorrectos.

        El valor predeterminado es NORELY.

    • foreign_key_option

      Enumera las propiedades específicas de las restricciones de clave externa. Todas las propiedades son opcionales pero implícitas de manera predeterminada. Cada propiedad se puede especificar como máximo una vez.

      • MATCH FULL

        Para que la restricción se considere como True, todos los valores de columna deben ser NOT NULL.

      • ON UPDATE NO ACTION

        Si se actualiza el elemento primario PRIMARY KEY, Azure Databricks no realizará ninguna acción para restringir la actualización ni actualizará la clave externa.

      • ON DELETE NO ACTION

        Si se elimina la fila primaria, Azure Databricks no realizará ninguna acción para restringir la acción, actualizar la clave externa ni eliminar la fila dependiente.

Importante

Azure Databricks no aplica restricciones de clave principal ni de clave externa. Confirme las restricciones de clave antes de agregar una clave principal o externa. El proceso de ingesta puede proporcionar dicha garantía o también puede ejecutar comprobaciones en los datos.

Ejemplos

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