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.
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 :
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
CHECKpode 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
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.
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:
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:
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;