Restrições no Azure Databricks
O Azure Databricks dá suporte a cláusulas padrão de gerenciamento de restrições SQL. As restrições dividem-se em duas categorias:
- As infrações impostas garantem que a qualidade e a integridade dos dados adicionados a uma tabela sejam verificadas automaticamente.
- As restrições de chave primária informativa e chave estrangeira codificam relações entre campos em tabelas e não são impostas.
Todas as restrições no Azure Databricks exigem Delta Lake.
Delta Live Tables tem um conceito semelhante conhecido como expectativas. Consulte Gerenciar a qualidade dos dados com o Delta Live Tables.
Restrições impostas no Azure Databricks
Quando uma restrição é violada, a transação falha com um erro. Há suporte para dois tipos de restrições:
NOT NULL
: indica que os valores em colunas específicas não podem ser nulos.CHECK
: indica que uma expressão booleana especificada deve ser verdadeira para cada linha de entrada.
Importante
Adicionar uma restrição atualiza automaticamente a versão do protocolo do gravador de tabela se a versão anterior do gravador for menor que 3. Consulte Como o Azure Databricks gerencia a compatibilidade de recursos do Delta Lake? para entender o controle de versão do protocolo de tabela e o que significa atualizar a versão do protocolo.
Definir uma NOT NULL
restrição no Azure Databricks
Você especifica NOT NULL
restrições no esquema ao criar uma tabela. Você solta ou adiciona NOT NULL
restrições usando o ALTER TABLE ALTER COLUMN
comando.
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;
Antes de adicionar uma NOT NULL
restrição a uma tabela, o Azure Databricks verifica se todas as linhas existentes satisfazem a restrição.
Se você especificar uma NOT NULL
restrição em uma coluna aninhada em uma struct, a struct pai também não deverá ser nula. As colunas aninhadas em tipos de matriz ou mapa não aceitam NOT NULL
restrições.
Consulte CREATE TABLE [USING] e ALTER TABLE ALTER COLUMN.
Definir uma CHECK
restrição no Azure Databricks
Você gerencia CHECK
restrições usando os ALTER TABLE ADD CONSTRAINT
comandos e ALTER TABLE DROP CONSTRAINT
. ALTER TABLE ADD CONSTRAINT
Verifica se todas as linhas existentes satisfazem a restrição antes de adicioná-la à tabela.
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;
Consulte ALTER TABLE ADD CONSTRAINT e ALTER TABLE DROP CONSTRAINT.
CHECK
As restrições são expostas como propriedades de tabela na saída dos DESCRIBE DETAIL
comandos and SHOW TBLPROPERTIES
.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Desativar restrições de verificação
No Databricks Runtime 15.4 LTS e superior, você pode usar o DROP FEATURE
comando para remover restrições de verificação de uma tabela e fazer downgrade do protocolo de tabela.
Consulte Recursos da tabela Drop Delta.
Declarar relações de chave primária e chave estrangeira
Nota
- As restrições de chave primária e chave estrangeira estão disponíveis no Databricks Runtime 11.3 LTS e superior, e são totalmente GA no Databricks Runtime 15.2 e superior.
- As restrições de chave primária e chave estrangeira exigem o Unity Catalog e o Delta Lake.
Você pode usar relações de chave primária e chave estrangeira em campos nas tabelas do Catálogo Unity. As chaves primária e estrangeira são apenas informativas e não são impostas. As chaves estrangeiras devem fazer referência a uma chave primária em outra tabela.
Você pode declarar chaves primárias e chaves estrangeiras como parte da cláusula de especificação da tabela durante a criação da tabela. Esta cláusula não é permitida durante as declarações CTAS. Você também pode adicionar restrições às tabelas existentes.
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);
Você pode consultar o information_schema
ou usar DESCRIBE
para obter detalhes sobre como as restrições são aplicadas em um determinado catálogo.
Veja: