Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure Databricks dá suporte a cláusulas de gerenciamento de restrição SQL padrão:
- Restrições impostas verificam a integridade dos dados antes de adicionar linhas a uma tabela.
- Restrições informativas (chave primária, chave estrangeira e restrições exclusivas) definem relações entre campos em tabelas e não são impostas.
Todas as restrições no Azure Databricks exigem o Delta Lake.
Para um conceito relacionado em pipelines do Lakeflow, consulte Gerenciar a qualidade dos dados com expectativas de pipeline.
Restrições impostas
Quando uma restrição é violada, a transação falha com um erro. Azure Databricks dá suporte a dois tipos de restrições:
-
NOT NULL: indica que os valores em colunas específicas não podem ser nulos. -
CHECK: indica que uma expressão booliana especificada precisa ser verdadeira para cada linha de entrada.
Note
A adição de uma restrição atualiza o protocolo de gravador de tabela se a versão atual do gravador for menor que 3. Isso pode afetar a compatibilidade com clientes externos do Delta Lake. Consulte a compatibilidade de recursos e protocolos do Delta Lake.
Restrição NOT NULL
Ao criar uma tabela, especifique NOT NULL restrições no esquema. Para eliminar ou adicionar NOT NULL restrições após a criação, use o ALTER TABLE ... ALTER COLUMN comando. O exemplo a seguir cria uma people_demo tabela que o restante desta seção reutiliza:
CREATE OR REPLACE TABLE main.default.people_demo (
id INT NOT NULL,
firstName STRING,
middleName STRING NOT NULL,
lastName STRING,
gender STRING,
birthDate TIMESTAMP,
ssn STRING,
salary INT
);
ALTER TABLE main.default.people_demo ALTER COLUMN middleName DROP NOT NULL;
ALTER TABLE main.default.people_demo ALTER COLUMN ssn SET NOT NULL;
Azure Databricks verifica se todas as linhas existentes atendem à 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 em um struct, o struct pai também precisará não ser nulo. 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.
Restrição CHECK
Gerencie CHECK restrições com os comandos ALTER TABLE ADD CONSTRAINT e ALTER TABLE DROP CONSTRAINT.
ALTER TABLE ADD CONSTRAINT verifica se todas as linhas existentes atendem à restrição antes de adicionar a restrição à tabela.
As seguintes restrições se aplicam a constrangimentos de verificação:
- Uma
CHECKexpressão de restrição pode usar quaisquer funções SQL no Spark que sempre retornam o mesmo resultado quando recebem os mesmos valores de argumento, exceto os seguintes tipos de funções:- Funções definidas pelo usuário.
- Funções de agregação.
- Funções de janela.
- Funções que retornam várias linhas.
Adicionar a uma tabela existente
O exemplo a seguir adiciona uma CHECK restrição à people_demo tabela criada na seção anterior, e depois a elimina:
ALTER TABLE main.default.people_demo ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1900-01-01');
ALTER TABLE main.default.people_demo DROP CONSTRAINT dateWithinRange;
Consulte ALTER TABLE ADD CONSTRAINT e ALTER TABLE DROP CONSTRAINT.
Exibir propriedades da tabela de restrição de verificação
Use os DESCRIBE DETAIL comandos e SHOW TBLPROPERTIES para ver as restrições de CHECK uma tabela. O exemplo a seguir adiciona uma restrição a people_demo, e então a exibe:
ALTER TABLE main.default.people_demo ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL main.default.people_demo;
SHOW TBLPROPERTIES main.default.people_demo;
Remover restrições de verificação
No Databricks Runtime 15.4 LTS e posteriores, use o comando DROP FEATURE para remover restrições de verificação de uma tabela e rebaixar o protocolo de tabela.
Confira Remover um recurso de tabela do Delta Lake e fazer downgrade do protocolo de tabela.
Declarar chave primária, chave estrangeira e restrições exclusivas
A chave primária, a chave estrangeira e as restrições exclusivas são somente informativas e não são impostas. Eles podem melhorar o desempenho por meio de otimizações de consulta.
- Chave primária e chave estrangeira: disponível para Unity Catalog e as tabelas Delta Lake no Databricks Runtime 13.3 LTS e posteriores. GA no Databricks Runtime 15.2 e superior. As chaves estrangeiras devem fazer referência a uma chave primária ou restrição exclusiva em outra tabela.
-
Exclusivo: disponível em versão preliminar pública para o Catálogo do Unity e tabelas delta lake no Databricks SQL e no Databricks Runtime 18.2 e superior. Uma tabela pode ter várias restrições exclusivas. Chaves estrangeiras podem referenciar uma coluna única usando
REFERENCES parent_table(unique_col). Colunas exclusivas podem ser anuláveis porqueNULLos valores são tratados como distintos uns dos outros.
Consulte o information_schema, use DESCRIBE TABLE EXTENDED ou use SHOW CREATE TABLE para obter detalhes sobre como as restrições são aplicadas em um catálogo específico.
Adicionar a novas tabelas
Declare chaves primárias, chaves estrangeiras e restrições exclusivas como parte da cláusula de especificação da tabela durante a criação da tabela:
CREATE OR REPLACE TABLE main.default.T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL,
CONSTRAINT t_pk PRIMARY KEY(pk1, pk2));
CREATE OR REPLACE TABLE main.default.S(pk INTEGER NOT NULL PRIMARY KEY,
fk1 INTEGER, fk2 INTEGER,
CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES main.default.T);
CREATE OR REPLACE TABLE main.default.U(id INTEGER NOT NULL, email STRING NOT NULL,
CONSTRAINT u_uq_email UNIQUE(email));
As instruções CTAS não oferecem suporte a essa cláusula de restrição.
Adicionar a tabelas existentes
Alternativamente, adicione as mesmas restrições às tabelas que já existem. Essa abordagem alcança o mesmo resultado da seção anterior. O exemplo a seguir recria T, , e U sem restrições, então adiciona cada restrição com ALTER TABLE ADD CONSTRAINTS. Adicione uma chave primária antes da chave estrangeira que a referencia:
CREATE OR REPLACE TABLE main.default.T(pk1 INTEGER NOT NULL, pk2 INTEGER NOT NULL);
CREATE OR REPLACE TABLE main.default.S(pk INTEGER NOT NULL, fk1 INTEGER, fk2 INTEGER);
CREATE OR REPLACE TABLE main.default.U(id INTEGER NOT NULL, email STRING NOT NULL);
ALTER TABLE main.default.T ADD CONSTRAINT t_pk PRIMARY KEY(pk1, pk2);
ALTER TABLE main.default.S ADD CONSTRAINT s_t_fk FOREIGN KEY(fk1, fk2) REFERENCES main.default.T;
ALTER TABLE main.default.U ADD CONSTRAINT u_uq_email UNIQUE(email);