Поделиться через


предложение ADD CONSTRAINT

Область применения:флажок Databricks SQL флажок Databricks Runtime

Добавляет информационный первичный ключ, информационный внешний ключ или принудительное constraint в существующий tableDelta Lake.

Синтаксис

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 }

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

Parameters

  • check_constraint

    Определяет проверку constraint для Delta Lake table.

    • CONSTRAINT name

      Задает имя для constraint. Имя должно быть уникальным в пределах table. Если имя не указано для FOREIGN KEY или PRIMARY KEYconstraint, Azure Databricks generate.

    • CHECK ( условие)

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

      condition могут состоять из литералов, column идентификаторов в table, а также детерминированных, встроенных функций ИЛИ операторов SQL, кроме следующих:

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

      Чтобы CHECKconstraint удовлетворялся в Azure Databricks, он должен оцениваться в true.

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

  • key_constraint

    Внимание

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

    Область применения:флажок Databricks SQL флажок Databricks Runtime 11.3 LTS и выше

    Определяет информационный первичный ключ или информационный внешний ключ constraint для Delta Lake table.

    • CONSTRAINT name

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

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

      применимо:флажок Unity Catalog только

      Добавляет первичный ключ constraint в Delta Lake table. У table может быть не более одного первичного ключа.

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

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

      Параметр column объекта table определён как NOT NULL. Column имена не должны повторяться.

    • TIMESERIES

      Область применения:флажок Databricks SQL флажок Databricks Runtime 13.3 LTS и выше

      При необходимости помечает компонент первичного ключа column как представляющий временной ряд.

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

      применимо:флажок Unity Catalog только

      Добавляет внешнюю ссылку (ссылочная целостность) constraint в Delta Lake table.

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

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

        column номер субъекта table. Column имена не должны повторяться. Тип данных каждого column должен соответствовать типу соответствующего parent_column. Число columns должно соответствовать количеству parent_columns. Два внешних ключа не могут разделять один и тот же set внешнего ключа columns.

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

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

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

        column в родительском элементе table, который входит в состав его первичного ключа. Необходимо перечислить все первичные ключи columns родительского table.

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

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

    • constraint_option

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

      • NOT ENFORCED

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

      • DEFERRABLE

        Принудительное применение constraint может быть отложено.

      • INITIALLY DEFERRED

        Constraint принудительное применение отложено.

      • NORELY или RELY

        Область применения:флажок Databricks SQL флажок Databricks Runtime 14.2 и более поздних версий для PRIMARY KEY ограничений

        применимо:флажок Databricks SQL установлен флажок Databricks Runtime 15.4 и более поздних версий для ограничений FOREIGN KEY

        Если RELY, Azure Databricks может использовать constraint для перезаписи запросов. Ответственность пользователя состоит в обеспечении выполнения требований constraint. Использование "constraint", который не соответствует требованиям, может привести к неправильным результатам запроса.

        Значение по умолчанию — NORELY.

    • foreign_key_option

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

      • MATCH FULL

        Чтобы constraint считалось истинным, все columnvalues должны быть NOT NULL.

      • ON UPDATE NO ACTION

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

      • ON DELETE NO ACTION

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

Внимание

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

Примеры

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