Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Azure Databricks dá suporte a cláusulas padrão de gerenciamento de restrições SQL. As restrições dividem-se em duas categorias:
- As restrições impostas garantem que a qualidade e a integridade dos dados adicionados a uma tabela sejam verificadas automaticamente.
- As restrições de chave primária informativa e chave estrangeira codificam relações entre campos em tabelas e não são impostas.
Todas as restrições no Azure Databricks exigem Delta Lake.
Lakeflow Spark Declarative Pipelines tem um conceito semelhante conhecido como expectativas. Consulte Gerir a qualidade dos dados com as expectativas da linha de produção.
Restrições impostas no Azure Databricks
Quando uma restrição é violada, a transação falha com um erro. Há suporte para 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 booleana especificada deve ser verdadeira para cada linha de entrada.
Importante
Adicionar uma restrição atualiza automaticamente a versão do protocolo do gravador de tabela se a versão anterior do gravador for menor que 3. Consulte Compatibilidade de recursos e protocolos Delta Lake para entender o controle de versão do protocolo de tabela e o que significa atualizar a versão do protocolo.
Definir uma restrição de NOT NULL no Azure Databricks
Você especifica restrições NOT NULL no esquema ao criar uma tabela. Você solta ou adiciona NOT NULL restrições usando o ALTER TABLE ALTER COLUMN comando.
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;
Antes de adicionar uma restrição de NOT NULL a uma tabela, o Azure Databricks verifica se todas as linhas existentes satisfazem a restrição.
Se especificar uma restrição de NOT NULL numa coluna aninhada dentro de uma struct, a struct mãe também não deverá ser nula. As colunas aninhadas em tipos de matriz ou mapa não aceitam restrições de NOT NULL.
Ver CREATE TABLE [USING] e ALTER TABLE ALTER COLUMN.
Definir uma restrição de CHECK no Azure Databricks
Você gerencia CHECK restrições usando os ALTER TABLE ADD CONSTRAINT comandos e ALTER TABLE DROP CONSTRAINT .
ALTER TABLE ADD CONSTRAINT verifica se todas as linhas existentes satisfazem a restrição antes de adicioná-la à tabela.
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.
As restrições CHECK são apresentadas como propriedades de tabela na saída dos comandos DESCRIBE DETAIL e SHOW TBLPROPERTIES.
ALTER TABLE people10m ADD CONSTRAINT validIds CHECK (id > 1 and id < 99999999);
DESCRIBE DETAIL people10m;
SHOW TBLPROPERTIES people10m;
Desativar restrições de verificação
No Databricks Runtime 15.4 LTS e versões superiores, pode usar o comando DROP FEATURE para remover restrições de verificação de uma tabela e fazer downgrade do protocolo de tabela.
Consulte Remover uma funcionalidade da tabela Delta Lake e fazer downgrade do protocolo da tabela.
Declarar relações de chave primária e chave estrangeira
Nota
- As restrições de chave primária e chave estrangeira estão disponíveis no Databricks Runtime 11.3 LTS e superior, e são totalmente GA no Databricks Runtime 15.2 e superior.
- As restrições de chave primária e chave estrangeira exigem o Unity Catalog e o Delta Lake.
Você pode usar relações de chave primária e chave estrangeira em campos nas tabelas do Catálogo Unity. As chaves primária e estrangeira são apenas informativas e não são impostas. As chaves estrangeiras devem fazer referência a uma chave primária em outra tabela. Restrições de chave informacionais podem melhorar o desempenho ao suportar otimizações de consulta .
Você pode declarar chaves primárias e chaves estrangeiras como parte da cláusula de especificação da tabela durante a criação da tabela. Esta cláusula não é permitida durante as declarações CTAS. Você também pode adicionar restrições às tabelas existentes.
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);
Você pode consultar o information_schema ou usar DESCRIBE para obter detalhes sobre como as restrições são aplicadas em um determinado catálogo.
Veja: