Restrições em Databricks
Databricks oferece suporte a cláusulas de gerenciamento de restrição SQL padrão. As restrições se enquadram 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 informativas key primária e key estrangeira codificam relacionamentos entre campos em tabelas e não são impostas.
Todas as restrições no Databricks exigem Delta Lake.
Delta Live Tables tem um conceito semelhante conhecido como expectativas. Veja como gerenciar a qualidade dos dados com Delta Live Tables.
Restrições impostas no Databricks
Quando uma restrição é violada, a transação falha com um erro. Dois tipos de restrições são suportados:
NOT NULL
: indica que os valores em colunas específicas não podem ser nulos.CHECK
: indica que uma expressão Boolean 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 Databricks gerencia a compatibilidade do recurso Delta Lake? para entender o versionamento do protocolo de tabela e o que significa atualizar a versão do protocolo.
Definir uma restrição NOT NULL
no Databricks
Você especifica restrições NOT NULL
no esquema ao criar uma tabela. Você descarta ou adiciona restrições NOT NULL
usando o comando 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;
Antes de adicionar uma restrição NOT NULL
a uma tabela, o Databricks verifica se todas as linhas existentes atendem à restrição.
Se você especificar uma restrição NOT NULL
em uma coluna aninhada em uma estrutura, a estrutura pai também não deverá ser nula. As colunas aninhadas em tipos de matriz ou mapa não aceitam restrições NOT NULL
.
Consulte CREATE TABLE [USING] e ALTER TABLE ALTER COLUMN.
Definir uma restrição CHECK
no Databricks
Você gerencia restrições CHECK
usando os comandos ALTER TABLE ADD CONSTRAINT
e ALTER TABLE DROP CONSTRAINT
. ALTER TABLE ADD CONSTRAINT
verifica se todas as linhas existentes atendem à 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 da 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 as restrições de verificação
Em Databricks Runtime 15.4 LTS e acima, o senhor pode usar o comando DROP FEATURE
para remover restrições de verificação de uma tabela e fazer downgrade do protocolo da tabela.
Consulte Drop Delta table recurso.
Declarar relacionamentos de chave primária e chave estrangeira
Observação
As restrições primárias key e estrangeiras key estão disponíveis em Databricks Runtime 11.3 LTS e acima, e são totalmente GA em Databricks Runtime 15.2 e acima.
As restrições key primária e key estrangeira requerem Unity Catalog e Delta Lake.
Você pode usar relacionamentos key primária e key estrangeira em campos nas tabelas Unity Catalog . key primária e estrangeira são apenas informativas e não são aplicadas. key estrangeira deve fazer referência a uma key primária em outra tabela.
Você pode declarar key primária e key estrangeira como parte da cláusula de especificação da tabela durante a criação da tabela. Esta cláusula não é permitida durante instruções CTAS. Você também pode adicionar restrições a 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 query o information_schema
ou usar DESCRIBE
para obter detalhes sobre como as restrições são aplicadas em um determinado catálogo.
Ver: