Pular para o conteúdo principal

Restrições sobre Databricks

O Databricks oferece suporte a cláusulas padrão de gerenciamento de restrições SQL:

  • As restrições impostas verificam a integridade dos dados antes de adicionar linhas a uma tabela.
  • As restrições de key primária informativa e key estrangeira definem relacionamentos entre campos em tabelas e não são aplicadas.

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

Para um conceito relacionado no pipeline declarativo LakeFlow Spark , veja gerenciar a qualidade dos dados com as expectativas pipeline.

Restrições impostas no Databricks

Quando uma restrição é violada, a transação falha com um erro. O Databricks suporta 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.
importante

Ao adicionar uma restrição, Databricks atualiza automaticamente a versão do protocolo de gravação da tabela se a versão anterior for inferior a 3. Consulte Compatibilidade e protocolos de recursosDelta 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 na Databricks

Ao criar uma tabela, especifique restrições NOT NULL no esquema. Para remover ou adicionar restrições NOT NULL , use 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;

O Databricks verifica se todas as linhas existentes satisfazem a restrição antes de adicionar uma restrição NOT NULL a uma tabela.

Se você especificar uma restrição NOT NULL em uma coluna aninhada dentro de uma struct, a struct pai também não deve ser nula. Colunas aninhadas dentro de 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

gerenciar restrições CHECK com 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 adicionar a restrição à tabela.

As seguintes restrições se aplicam às restrições de verificação:

  • Uma expressão de restrição CHECK pode usar qualquer função SQL no Spark que sempre retorne o mesmo resultado quando receber os mesmos valores de argumento, exceto os seguintes tipos de funções:
    • Funções definidas pelo usuário.
    • Funções agregadas.
    • Funções da janela.
    • Funções que retornam múltiplas linhas.

Adicionar a uma tabela existente

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.

visualizar verificar propriedades da tabela de restrições

Use os comandos DESCRIBE DETAIL e SHOW TBLPROPERTIES para ver as restrições CHECK de uma tabela.

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

DESCRIBE DETAIL people10m;

SHOW TBLPROPERTIES people10m;

Remover restrições de verificação

No Databricks Runtime 15.4 LTS e versões superiores, use o comando DROP FEATURE para remover as restrições de verificação de uma tabela e rebaixar o protocolo da tabela.

Consulte Drop a Delta Lake table recurso e downgrade table protocol.

Declarar relacionamentos key primários e key externos

Restrições key primária e key estrangeira estão disponíveis para tabelas Unity Catalog e Delta Lake no Databricks Runtime 13.3 LTS e versões superiores, e são GA (Disponibilidade Geral) no Databricks Runtime 15.2 e versões superiores.

As chaves primárias e estrangeiras são meramente informativas e não são aplicadas. A chave estrangeira deve fazer referência a uma key primária em outra tabela. Restrições key informativas podem melhorar o desempenho com otimizações de consulta.

Consulte o information_schema ou use DESCRIBE para obter detalhes sobre como as restrições são aplicadas em um determinado catálogo.

Adicionar a novas tabelas

Declare a chave primária e a chave estrangeira como parte da cláusula de especificação da tabela durante a criação da tabela:

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);

As instruções CTAS não suportam essa cláusula de restrição.

Adicionar às tabelas existentes

Para adicionar restrições a tabelas existentes:

SQL
ALTER TABLE T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES T;

Pedaços relacionados