Предложение 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Указывает имя ограничения. Имя должно быть уникальным в пределах таблицы. Если имя не указано, 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
Добавляет ограничение первичного ключа в таблицу 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
Добавляет в таблицу Delta Lake ограничение внешнего ключа (целостность данных).
Ограничения внешнего ключа не поддерживаются для таблиц в каталоге
hive_metastore
.-
Столбец таблицы темы. Имена столбцов не должны повторяться. Тип данных каждого столбца должен совпадать с типом соответствующего
parent_column
. Число столбцов должно совпадать с числом столбцовparent_columns
. Два внешних ключа не могут совместно использовать идентичный набор столбцов внешнего ключа. -
Указывает таблицу, на который ссылается внешний ключ. Таблица должна иметь определенное ограничение
PRIMARY KEY
и должна принадлежать вам. -
Столбец в родительской таблице, которая является частью его первичного ключа. Должны быть указаны все столбцы первичного ключа родительской таблицы.
Если родительские столбцы не указаны, подразумевается, что они указаны в порядке, заданном в определении
PRIMARY KEY
.
Ограничения внешнего ключа, которые различаются только в перестановке столбцов внешнего ключа, запрещены.
-
constraint_option
Выводит свойства ограничений. Все свойства являются необязательными, но подразумеваются по умолчанию. Каждое свойство может быть указано не более одного раза.
NOT ENFORCED
Azure Databricks не выполняет никаких действий, чтобы применить его для существующих или новых строк.
DEFERRABLE
Принудительное применение ограничений может быть отложено.
INITIALLY DEFERRED
Принудительное применение ограничений отложено.
NORELY
илиRELY
Область применения: Databricks SQL Databricks Runtime 14.2 и более поздних версий
Если
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);