Comandos DML e CTAS: possibilidade de resultados errados quando a propriedade RELY é definida (pendente)

Atenção

Essa mudança de comportamento está no pacote 2025_03.

Para saber o status atual do pacote, consulte Histórico do pacote.

Quando esse pacote de mudança de comportamento está ativado, uma otimização em determinadas instruções DML e CTAS pode produzir resultados errados quando a propriedade RELY é definida na tabela de destino:

Antes da mudança:

As instruções DML e CTAS em tabelas com restrições UNIQUE e PRIMARY KEY não se qualificam para uma otimização aplicada às operações DISTINCT e GROUP BY. (O otimizador remove as colunas de agrupamento redundantes)

Como a otimização em questão é atualmente aplicada somente às instruções SELECT, ela não apresenta risco de que dados incorretos possam ser inseridos se a propriedade RELY for definida para uma restrição e ocorrer uma violação da integridade referencial.

Após a mudança:

As instruções DML e CTAS em tabelas com restrições UNIQUE e PRIMARY KEY agora se qualificam para a mesma otimização aplicada às instruções SELECT.

Se a propriedade RELY for definida para uma restrição e ocorrer uma violação da integridade referencial, poderão ser inseridos dados incorretos.

Informações básicas

O Snowflake não impõe a integridade referencial em tabelas padrão, independentemente das restrições e propriedades que o senhor definir. (A exceção a essa regra são as tabelas híbridas, em que certas restrições são exigidas e aplicadas)

A propriedade de restrição RELY declara que você acredita que os dados da tabela têm integridade referencial (ou que outro aplicativo a está impondo antes de os dados serem carregados no Snowflake). A propriedade RELY deve ser definida explicitamente e não é ativada por padrão. Já está documentado que a definição dessa propriedade pode levar a um comportamento não intencional e/ou a resultados inesperados.

Identificação de tabelas com a propriedade de restrição RELY

Para descobrir quais tabelas têm a propriedade RELY definida para as restrições PRIMARY KEY ou UNIQUE, execute esta consulta:

SELECT table_schema, table_name
  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
  WHERE RELY ='YES'
    AND (constraint_type = 'PRIMARY KEY' OR constraint_type = 'UNIQUE');
Copy

Considere descartar as restrições ou não definir a propriedade RELY se você prevê algum problema quando a otimização entrar em vigor.

Ref: 1902