Partilhar via


Restrições no Azure Databricks

Azure Databricks dá suporte a cláusulas de gestão padrão SQL constraint. As restrições dividem-se em duas categorias:

  • Os constrangimentos impostos garantem que a qualidade e a integridade dos dados adicionados a um table sejam verificadas automaticamente.
  • As restrições informativas de chave primária e chave estrangeira codificam relações entre campos em tables e não são impostas.

Todas as restrições no Azure Databricks exigem Delta Lake.

Delta Live Tables tem um conceito semelhante conhecido como expectativas. Consulte Gerenciar a qualidade dos dados com o Delta Live Tables.

Restrições impostas no Azure Databricks

Quando um constraint é violado, a transação falha com um erro. Há suporte para dois tipos de restrições:

  • NOT NULL: indica que values em columns específicos não pode ser nulo.
  • CHECK: indica que uma expressão booleana especificada deve ser verdadeira para cada linha de entrada.

Importante

Adicionar um constraint atualiza automaticamente a versão do protocolo do gravador table se a versão anterior do gravador é menor que 3. Consulte 'Como o Azure Databricks gere a compatibilidade de recursos do Delta Lake?' para entender table a versão de protocolo e o que significa atualizar a versão do protocolo.

Set um NOT NULLconstraint no Azure Databricks

Você define restrições de NOT NULL em schema ao criar um table. 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 um NOT NULLconstraint a um table, o Azure Databricks verifica se todas as linhas existentes satisfazem o constraint.

Se especificar um NOT NULLconstraint em um column aninhado em uma struct, a struct pai também não pode ser nula. Tipos de Columns aninhados em uma matriz ou mapa não aceitam restrições de NOT NULL.

Ver CREATE TABLE [USING] e ALTER TABLE ALTER COLUMN.

Set um CHECKconstraint 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 o constraint antes de adicioná-lo ao table.

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;

Ver ALTER TABLE ADD CONSTRAINT e ALTER TABLE DROP CONSTRAINT.

As restrições CHECK são apresentadas como propriedades table 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 superior, você pode usar comando DROP FEATURE para remove verificar restrições de um table e rebaixar o protocolo table.

Consulte recursos do Drop Delta table.

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 requerem Unity Catalog e Delta Lake.

Você pode usar relações de chave primária e chave estrangeira nos campos do Unity Catalogtables. 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 outro table.

Você pode declarar chaves primárias e chaves estrangeiras como parte da cláusula de especificação table durante a criação de table. Esta cláusula não é permitida durante as declarações CTAS. Você também pode adicionar restrições aos tablesexistentes.

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 get detalhes sobre como as restrições são aplicadas em um determinado catalog.

Veja: