Pular para o conteúdo principal

Restrições sobre Databricks

O Databricks é compatível com as cláusulas padrão de gerenciamento de restrições SQL. 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 primárias key e estrangeiras key codificam as relações entre os campos das tabelas e não são aplicadas.

Todas as restrições em Databricks exigem o Delta Lake.

O DLT tem um conceito semelhante conhecido como expectativas. Veja como gerenciar a qualidade dos dados com pipeline expectativas.

Restrições impostas aos 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.
  • CHECKindica que uma expressão booleana especificada deve ser verdadeira para cada linha de entrada.
important

A adição de uma restrição atualiza automaticamente a versão do protocolo do gravador de tabelas se a versão anterior do gravador for inferior a 3. Consulte How does Databricks gerenciar Delta Lake recurso compatibility? para entender o controle de versão do protocolo da tabela e o que significa atualizar a versão do protocolo.

Definir uma restrição NOT NULL na Databricks

Você especifica as restrições NOT NULL no esquema ao criar uma tabela. O senhor elimina ou adiciona restrições do site NOT NULL usando o comando ALTER TABLE ALTER COLUMN.

SQL
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, a Databricks verifica se todas as linhas existentes satisfazem a restrição.

Se você especificar uma restrição NOT NULL em uma coluna aninhada em uma estrutura, a estrutura principal também não deverá ser nula. 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 na Databricks

O senhor gerencia as restrições do CHECK usando os comandos ALTER TABLE ADD CONSTRAINT e ALTER TABLE DROP CONSTRAINT. ALTER TABLE ADD CONSTRAINT verifica se todas as linhas existentes satisfazem a restrição antes de adicioná-la à tabela.

SQL
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 são expostas como propriedades da tabela na saída do comando DESCRIBE DETAIL e SHOW TBLPROPERTIES.

SQL
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Desativar 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 key primários e key externos

nota
  • 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 primárias key e estrangeiras key exigem Unity Catalog e Delta Lake.

O senhor pode usar relações primárias key e estrangeiras key nos campos das tabelas Unity Catalog. As chaves primária e estrangeira são apenas informativas e não são aplicadas. A chave estrangeira deve fazer referência a uma chave primária key em outra tabela. As restrições informativas do site key podem melhorar o desempenho por meio do suporte a otimizações de consultas.

O senhor pode declarar a chave primária e a chave estrangeira 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 do CTAS. Você também pode adicionar restrições às tabelas existentes.

SQL
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.

Consulte: