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.
- Restrições informativas (key primária, key estrangeira e restrições exclusivas) 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
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.
A adição de uma restrição atualiza o protocolo de gravação da tabela se a versão atual do gravador for inferior a 3. Isso pode afetar a compatibilidade com clientes externos do Delta Lake. Consulte a compatibilidade de recursos e protocolos do Delta Lake.
NOT NULL restrição
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.
CHECK restrição
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 chave primária, chave estrangeira e restrições de unicidade
As restrições de chave primária, chave estrangeira e chave única são apenas informativas e não são impostas. Eles podem melhorar o desempenho por meio de otimizações de query.
- **Key primária e key estrangeira**: disponíveis para tabelas do Unity Catalog e Delta Lake no Databricks Runtime 13.3 LTS e superior. Disponibilidade geral (GA) no Databricks Runtime 15.2 e acima. As keys estrangeiras devem fazer referência a uma key primária ou restrição exclusiva em outra tabela.
- Exclusivo: disponível em pré-lançamento público para Unity Catalog e tabelas Delta Lake no Databricks SQL e Databricks Runtime 18.2 e acima. Uma tabela pode ter múltiplas restrições únicas. key estrangeiras podem referenciar uma coluna única usando
REFERENCES parent_table(unique_col). Colunas únicas podem ser anuláveis porque os valores deNULLsão tratados como distintos entre si.
É 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:
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:
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);