Restrições no Azure Databricks
Azure Databricks dá suporte a cláusulas de gestão padrão SQL constraint. As restrições dividem-se em duas categorias:
- Os constrangimentos impostos garantem que a qualidade e a integridade dos dados adicionados a um table sejam verificadas automaticamente.
- As restrições informativas de chave primária e chave estrangeira codificam relações entre campos em tables 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 um constraint é violado, a transação falha com um erro. Há suporte para dois tipos de restrições:
-
NOT NULL
: indica que values em columns específicos não pode ser nulo. -
CHECK
: indica que uma expressão booleana especificada deve ser verdadeira para cada linha de entrada.
Importante
Adicionar um constraint atualiza automaticamente a versão do protocolo do gravador table se a versão anterior do gravador é menor que 3. Consulte 'Como o Azure Databricks gere a compatibilidade de recursos do Delta Lake?' para entender table a versão de protocolo e o que significa atualizar a versão do protocolo.
Set um NOT NULL
constraint no Azure Databricks
Você define restrições de NOT NULL
em schema ao criar um table. 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 um NOT NULL
constraint a um table, o Azure Databricks verifica se todas as linhas existentes satisfazem o constraint.
Se especificar um NOT NULL
constraint em um column aninhado em uma struct, a struct pai também não pode ser nula. Tipos de Columns aninhados em uma matriz ou mapa não aceitam restrições de NOT NULL
.
Ver CREATE TABLE [USING] e ALTER TABLE ALTER COLUMN.
Set um CHECK
constraint 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 o constraint antes de adicioná-lo ao table.
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 table 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 superior, você pode usar comando DROP FEATURE
para remove verificar restrições de um table e rebaixar o protocolo table.
Consulte recursos do Drop Delta table.
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 requerem Unity Catalog e Delta Lake.
Você pode usar relações de chave primária e chave estrangeira nos campos do Unity Catalogtables. 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 outro table.
Você pode declarar chaves primárias e chaves estrangeiras como parte da cláusula de especificação table durante a criação de table. Esta cláusula não é permitida durante as declarações CTAS. Você também pode adicionar restrições aos tablesexistentes.
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 get detalhes sobre como as restrições são aplicadas em um determinado catalog.
Veja: