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 restriçõ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.
DLT tem um conceito semelhante conhecido como expectativas. Consulte Gerir a qualidade dos dados com as expectativas da linha de produção.
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 a versão do protocolo de tabelas e o que significa atualizar a versão do protocolo.
Definir uma restrição de NOT NULL
no Azure Databricks
Você especifica restrições NOT NULL
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 restrição de NOT NULL
a uma tabela, o Azure Databricks verifica se todas as linhas existentes satisfazem a restrição.
Se especificar uma restrição de NOT NULL
numa coluna aninhada dentro de uma struct, a struct mãe também não deverá ser nula. As colunas aninhadas em tipos de matriz ou mapa não aceitam restrições de NOT NULL
.
Ver CREATE TABLE [USING] e ALTER TABLE ALTER COLUMN.
Definir uma restrição de CHECK
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;
Ver ALTER TABLE ADD CONSTRAINT e ALTER TABLE DROP CONSTRAINT.
As restrições CHECK
são apresentadas como propriedades de tabela na saída dos comandos DESCRIBE DETAIL
e 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 versões superiores, pode usar o comando DROP FEATURE
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: