ADICIONAR cláusula CONSTRAINT
Aplica-se a: Databricks SQL Databricks Runtime
Adiciona uma chave primária informativa , uma chave estrangeira informativa ou uma restrição de verificação imposta a uma tabela Delta Lake existente.
Sintaxe
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition ) [ ENFORCED ]
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_table [ ( parent_column [, ...] ] )
[ constraint_option | foreign_key_option ] [...]
}
}
constraint_option
{ NOT ENFORCED |
DEFERRABLE |
INITIALLY DEFERRED |
{ NORELY | RELY } }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
Para compatibilidade com dialetos SQL não padrão, você pode especificar ENABLE NOVALIDATE
em vez de NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parâmetros
check_constraint
Define uma restrição de verificação para uma tabela Delta Lake.
CONSTRAINT
DesignaçãoEspecifica um nome para a restrição. O nome deve ser exclusivo dentro da tabela. Se nenhum nome for fornecido para uma restrição de
FOREIGN KEY
ouPRIMARY KEY
, o Azure Databricks gerará um.CHECK (
condição)
condition
deve ser uma expressão determinística que retorne aBOOLEAN
.condition
pode ser composto por literais, identificadores de coluna dentro da tabela e determinísticos, funções ou operadores SQL internos, exceto:- Funções agregadas
- Funções de janela analítica
- Funções da janela de classificação
- Funções do gerador com valor de tabela
Também
condition
não deve conter nenhuma subconsulta.Para que uma
CHECK
restrição seja satisfeita no Azure Databricks, ela deve ser avaliada comotrue
.O Delta Lake verifica a validade da restrição de verificação em relação a dados novos e existentes. Se qualquer linha existente violar a restrição, um erro será gerado.
key_constraint
Importante
Esta funcionalidade está em Pré-visualização Pública.
Aplica-se a: Databricks SQL Databricks Runtime 11.3 LTS e superior
Define uma chave primária informacional ou restrição de chave estrangeira informacional para uma tabela Delta Lake.
CONSTRAINT
DesignaçãoOpcionalmente, especifica um nome para a restrição. O nome deve ser exclusivo dentro do esquema. Se nenhum nome for fornecido, o Azure Databricks gerará um.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
Aplica-se a: Somente catálogo Unity
Adiciona uma restrição de chave primária à tabela Delta Lake. Uma tabela pode ter, no máximo, uma chave primária.
Não há suporte para restrições de chave primária para tabelas no
hive_metastore
catálogo.-
Uma coluna da tabela de assunto definida como
NOT NULL
. Os nomes das colunas não devem ser repetidos. TIMESERIES
Aplica-se a: Databricks SQL Databricks Runtime 13.3 LTS e superior
Opcionalmente, rotula o componente de coluna de chave primária como representando uma série temporal.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Aplica-se a: Somente catálogo Unity
Adiciona uma restrição de chave estrangeira (integridade referencial) à tabela Delta Lake.
Não há suporte para restrições de chave estrangeira para tabelas no
hive_metastore
catálogo.-
Uma coluna da tabela de assuntos. Os nomes das colunas não devem ser repetidos. O tipo de dados de cada coluna deve corresponder ao tipo de correspondência
parent_column
. O número de colunas deve corresponder ao número deparent_columns
. Duas chaves estrangeiras não podem compartilhar um conjunto idêntico de colunas de chave estrangeira. -
Especifica a tabela à qual a chave estrangeira se refere. A tabela deve ter uma restrição definida
PRIMARY KEY
e você deve ter oSELECT
privilégio na tabela. -
Uma coluna na tabela pai que faz parte de sua chave primária. Todas as colunas de chave primária da tabela pai devem ser listadas.
Se as colunas pai não estiverem listadas, elas devem ser especificadas na ordem dada na
PRIMARY KEY
definição.
Restrições de chave estrangeira que diferem apenas na permutação das colunas de chave estrangeira não são permitidas.
-
constraint_option
Lista as propriedades das restrições. Todas as propriedades são opcionais, mas implícitas por padrão. Cada propriedade pode, no máximo, ser especificada uma vez.
NOT ENFORCED
O Azure Databricks não toma nenhuma ação para impô-lo para linhas novas ou existentes.
DEFERRABLE
A aplicação da restrição pode ser adiada.
INITIALLY DEFERRED
A imposição de restrições é adiada.
NORELY
ouRELY
Aplica-se a: Databricks SQL Databricks Runtime 14.2 e superior para restrições
PRIMARY KEY
Aplica-se a: Databricks SQL Databricks Runtime 15.4 e versões superiores para restrições de
FOREIGN KEY
Se
RELY
, o Azure Databricks pode explorar a restrição para reescrever consultas. É da responsabilidade do utilizador garantir que o constrangimento é cumprido. Confiar em uma restrição que não é satisfeita pode levar a resultados de consulta incorretos.A predefinição é
NORELY
.
foreign_key_option
Lista as propriedades específicas para restrições de chave estrangeira. Todas as propriedades são opcionais, mas implícitas por padrão. Cada propriedade pode, no máximo, ser especificada uma vez.
MATCH FULL
Para que a restrição seja considerada verdadeira, todos os valores de coluna devem ser
NOT NULL
.ON UPDATE NO ACTION
Se o pai
PRIMARY KEY
estiver atualizado, o Azure Databricks não tomará nenhuma ação para restringir a atualização ou atualizar a chave estrangeira.ON DELETE NO ACTION
Se a linha pai for excluída, o Azure Databricks não tomará nenhuma ação para restringir a ação, atualizar a chave estrangeira ou excluir a linha dependente.
Importante
O Azure Databricks não impõe restrições de chave primária ou chave estrangeira. Confirme as restrições de chave antes de adicionar uma chave primária ou estrangeira. Seu processo de ingestão pode fornecer essa garantia, ou você pode executar verificações em relação aos seus dados.
Exemplos
-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);
-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
NOT ENFORCED RELY;
-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);