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


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

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

Добавляет информационный первичный ключ, информационный внешний ключ или принудительное ограничение проверки в существующую таблицу Delta 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.

Параметры

  • check_constraint

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

    • CONSTRAINT name

      Задает имя ограничения. Имя должно быть уникальным в таблице. Если имя не указано для ограничения FOREIGN KEY или PRIMARY KEY, Azure Databricks создаст его.

    • CHECK ( условие)

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

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

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

      Чтобы ограничение CHECK было удовлетворено в Azure Databricks, оно должно быть равным true.

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

  • key_constraint

    Внимание

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

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

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

    • CONSTRAINT name

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

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

      Применимо к:отмечено только в Unity Catalog

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

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

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

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

    • TIMESERIES

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

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

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

      Применимо к:отмечено только в Unity Catalog

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

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

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

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

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

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

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

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

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

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

    • constraint_option

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

      • NOT ENFORCED

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

      • DEFERRABLE

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

      • INITIALLY DEFERRED

        Принудительное применение ограничений откладывается.

      • NORELY или RELY

        Область применения:отмечено Databricks SQL отмечено Databricks Runtime 14.2 и выше для PRIMARY KEY ограничений

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

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

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

    • foreign_key_option

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

      • MATCH FULL

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

      • ON UPDATE NO ACTION

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

      • ON DELETE NO ACTION

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

Внимание

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