Предложение ADD CONSTRAINT (Databricks SQL)

Важно!

Эта функция предоставляется в режиме общедоступной предварительной версии.

Добавляет ограничение первичного ключа, внешнего ключа или проверки в существующую таблицу Delta Lake.

Синтаксис

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition ) [ ENFORCED ]

key_constraint
    { [ CONSTRAINT name ]
      {
        PRIMARY KEY ( key_column [, ...] ) [ 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 }

foreign_key_option
    { MATCH FULL |
      ON UPDATE NO ACTION |
      ON DELETE NO ACTION }

Для совместимости с нестандартными диалектами SQL можно указать ENABLE NOVALIDATE вместо NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Параметры

  • check_constraint

    Определяет ограничение проверки для таблицы Delta Lake.

    • CONSTRAINTимя

      Указывает имя ограничения. Имя должно быть уникальным в пределах таблицы. Если имя не указано, Databricks SQL создаст его.

    • CHECK (условие)

      condition должно быть детерминированным выражением, возвращающим логическое значение.

      condition может состоять из литералов, идентификаторов столбцов в таблице и детерминированных встроенных функций или операторов SQL, кроме:

      Кроме того, condition не должен содержать какой-либо вложенный запрос.

      Чтобы проверочное ограничение удовлетворялось в Azure Databricks, его значение должно быть эквивалентно значению true.

      Delta Lake проверяет соблюдение ограничения проверки как для новых, так и для существующих данных. Если любая существующая строка нарушает ограничение, создается ошибка.

  • key_constraint

    Важно!

    Эта функция предоставляется в режиме общедоступной предварительной версии.

    Добавляет ограничения первичного ключа или внешнего ключа для таблицы Delta Lake.

    Требуется:хранилище SQL версии 2022.30 или более поздней. Эта версия доступна в канале предварительной версии.

    • CONSTRAINTимя

      При необходимости указывает имя ограничения. Имя должно быть уникальным в пределах схемы. Если имя не указано, Databricks SQL создаст его.

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

      Добавляет ограничение первичного ключа в таблицу Delta Lake. Таблица может иметь не более одного первичного ключа.

      Ограничения первичного ключа не поддерживаются для таблиц в каталоге hive_metastore.

    • столбец_ключа

      Столбец таблицы темы, определенный как NOT NULL. Имена столбцов не должны повторяться.

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

      Добавляет в таблицу Delta Lake ограничение внешнего ключа (целостность данных).

      Ограничения внешнего ключа не поддерживаются для таблиц в каталоге hive_metastore.

      • столбец_внешнего_ключа

        Столбец таблицы темы. Имена столбцов не должны повторяться. Тип данных каждого столбца должен совпадать с типом соответствующего parent_column. Число столбцов должно совпадать с числом столбцов parent_columns. Два внешних ключа не могут совместно использовать идентичный набор столбцов внешнего ключа.

      • родительская_таблица

        Указывает таблицу, на который ссылается внешний ключ. Таблица должна иметь определенное ограничение PRIMARY KEY и должна принадлежать вам.

      • родительский_столбец

        Столбец в родительской таблице, которая является частью его первичного ключа. Должны быть указаны все столбцы первичного ключа родительской таблицы.

        Если родительские столбцы не указаны, подразумевается, что они указаны в порядке, заданном в определении PRIMARY KEY.

      Ограничения внешнего ключа, которые различаются только в перестановке столбцов внешнего ключа, запрещены.

    • constraint_option

      Выводит свойства ограничений. Все свойства являются необязательными, но подразумеваются по умолчанию. Каждое свойство может быть указано не более одного раза.

      • NOT ENFORCED

        Databricks SQL не выполняет каких-либо действий, чтобы применить его для существующих или новых записей.

      • DEFERRABLE

        Принудительное применение ограничений может быть отложено.

      • INITIALLY DEFERRED

        Принудительное применение ограничений отложено.

      • NORELY

        Databricks SQL не использует ограничение для перезаписи запроса.

    • foreign_key_option

      Выводит свойства, относящиеся к ограничениям внешнего ключа. Все свойства являются необязательными, но подразумеваются по умолчанию. Каждое свойство может быть указано не более одного раза.

      • MATCH FULL

        Чтобы ограничение считалось истинным, все значения столбцов должны быть NOT NULL.

      • ON UPDATE NO ACTION

        Если родительский PRIMARY KEY обновлен, Databricks SQL не выполняет каких-либо действий, чтобы ограничить обновление или обновить внешний ключ.

      • ON DELETE NO ACTION

        Если родительская запись удалена, Databricks SQL не выполняет каких-либо действий для ограничения действия, обновления внешнего ключа или удаления зависимой записи.

Важно!

Подтвердите ограничения ключа перед добавлением первичного или внешнего ключа. Процесс приема может обеспечить такую гарантию, или же вы можете выполнить проверки данных.

Примеры

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

-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);