Ограничения в Azure Databricks
Azure Databricks поддерживает стандартные предложения управления ограничениями SQL. Ограничения можно разделить на две категории:
- Принудительно применяемые ограничения гарантируют, что качество и целостность данных, добавленных в таблицу, автоматически проверяются.
- Информационный первичный ключ и ограничения внешнего ключа кодируют связи между полями в таблицах и не применяются.
Для всех ограничений в Azure Databricks требуется Delta Lake.
Delta Live Tables имеет аналогичную концепцию, известную как ожидания. См. Управление качеством данных сожиданий конвейера.
Принудительные ограничения в Azure Databricks
При нарушении ограничения транзакция завершается ошибкой. Поддерживаются два типа ограничений:
-
NOT NULL
: указывает, что значения в определенных столбцах не могут иметь значение NULL. -
CHECK
: указывает, что заданное логическое выражение должно возвращать значение true для каждой входной строки.
Внимание
При добавлении ограничения автоматически обновляется версия протокола записи данных, если предыдущая версия протокола записи была меньше 3. См. Как Azure Databricks управляет совместимостью функций Delta Lake?, чтобы понять управление версиями протоколов таблиц и что это означает для обновления версии протокола.
Установка ограничения NOT NULL
в Azure Databricks
При создании таблицы необходимо указать ограничения NOT NULL
в схеме. Для удаления или добавления ограничений NOT NULL
используйте команду ALTER TABLE ALTER COLUMN
.
CREATE TABLE people10m (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE people10m ALTER COLUMN ssn SET NOT NULL;
Перед добавлением ограничения NOT NULL
в таблицу Azure Databricks проверяет, соответствует ли все существующие строки ограничению.
Если указать ограничение NOT NULL
для столбца, вложенного в структуру, родительская структура также должна быть не NULL. Столбцы, вложенные в массив или типы карт, не принимают ограничения NOT NULL
.
См. CREATE TABLE [ИСПОЛЬЗОВАНИЕ] и ALTER TABLE ALTER COLUMN.
Установка ограничения CHECK
в Azure Databricks
Управление ограничениями CHECK
осуществляется с помощью команд ALTER TABLE ADD CONSTRAINT
и ALTER TABLE DROP CONSTRAINT
.
ALTER TABLE ADD CONSTRAINT
проверяет, удовлетворяют ли все существующие строки ограничению перед добавлением в таблицу.
CREATE TABLE people10m (
id INT,
firstName STRING,
middleName STRING,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE people10m ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE people10m DROP CONSTRAINT dateWithinRange;
См. ALTER TABLE ADD CONSTRAINT и ALTER TABLE DROP CONSTRAINT.
Ограничения CHECK
отображаются в качестве свойств таблицы в выходных данных команд DESCRIBE DETAIL
и SHOW TBLPROPERTIES
.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Отключение ограничений проверки
В Databricks Runtime 15.4 LTS и более поздних версиях можно использовать команду DROP FEATURE
для удаления ограничений проверки из таблицы и понижения уровня протокола таблицы.
См. возможности таблицы «Drop Delta».
Объявление связей первичного ключа и внешнего ключа
Примечание.
- Ограничения первичного ключа и внешнего ключа доступны в Databricks Runtime 11.3 LTS и более поздних версиях и полностью общедоступны в Databricks Runtime 15.2 и выше.
- Для первичных ключей и ограничений внешнего ключа требуются каталог Unity и Delta Lake.
Вы можете использовать связи первичного ключа и внешнего ключа в полях в таблицах каталога Unity. Первичные и внешние ключи являются информационными и не применяются принудительно. Внешние ключи должны ссылаться на первичный ключ в другой таблице.
Вы можете объявить первичные ключи и внешние ключи в рамках предложения спецификации таблицы во время создания таблицы. Это предложение не следует использовать с инструкциями CTAS. Вы также можете добавить ограничения в существующие таблицы.
CREATE TABLE T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE TABLE S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T);
Вы можете запросить information_schema
или использовать DESCRIBE
для получения сведений о том, как ограничения применяются в определенном каталоге.
См.