предложение 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 KEY
constraint, Azure Databricks generate.CHECK (
условие)
condition
должно быть детерминированным выражением, возвращающимBOOLEAN
значение .condition
могут состоять из литералов, column идентификаторов в table, а также детерминированных, встроенных функций ИЛИ операторов SQL, кроме следующих:- Агрегатные функции
- аналитические window функции
- функции ранжированияwindow
- Table ценные функции генератора
Кроме того,
condition
не должен содержать какой-либо вложенный запрос.Чтобы
CHECK
constraint удовлетворялся в 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_metastore
catalog.-
Параметр 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_metastore
catalog.-
column номер субъекта table. Column имена не должны повторяться. Тип данных каждого column должен соответствовать типу соответствующего
parent_column
. Число columns должно соответствовать количествуparent_columns
. Два внешних ключа не могут разделять один и тот же set внешнего ключа columns. -
Указывает внешний ключ table, на который ссылается. table должен иметь определенный
PRIMARY KEY
constraint, и у вас должна быть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);