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 chave primária, chave estrangeira e de exclusividade são apenas informativas, definem relações entre campos em tabelas e não são impostas.

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 chave primária, chave estrangeira e restrições de unicidade

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.

Restrições exclusivas estão disponíveis para tabelas do Unity Catalog e do Delta Lake no Databricks SQL e no Databricks Runtime 18.2 e acima, e em Pré-lançamento público. Uma tabela pode ter múltiplas restrições exclusivas. Chaves estrangeiras podem referenciar uma coluna única em outra tabela usando REFERENCES parent_table(unique_col). Colunas em uma restrição exclusiva podem ser anuláveis, inclusive quando a restrição é referenciada por uma chave estrangeira. Valores NULL em colunas exclusivas são tratados como distintos um do outro, portanto valores duplicados NULL não violam a semântica de uma restrição de exclusividade.

As restrições de chave primária, chave estrangeira e chave única são apenas informativas e não são impostas. Chaves estrangeiras devem fazer referência a uma chave primária ou a uma restrição de unicidade em outra tabela. Essas restrições podem melhorar o desempenho com otimizações de query.

É possível consultar o information_schema, usar DESCRIBE TABLE EXTENDED ou SHOW CREATE TABLE para obter detalhes sobre como as restrições são aplicadas em um determinado catálogo.

Adicionar a novas tabelas

Declarar chaves primárias, chaves estrangeiras e restrições de exclusividade 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);
CREATE TABLE U(id INTEGER NOT NULL, email STRING NOT NULL,
CONSTRAINT u_uq_email UNIQUE(email));

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;
ALTER TABLE U ADD CONSTRAINT u_uq_email UNIQUE(email);

Pedaços relacionados