Commandes DML et CTAS : Possibilité de résultats erronés lorsque la propriété RELY est définie (En attente)¶
Attention
Ce changement de comportement fait partie du bundle 2025_03.
Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.
Lorsque ce bundle de changements de comportement est activé, une optimisation sur certaines instructions DML et CTAS peut produire des résultats erronés lorsque la propriété RELY est définie sur la table cible :
- Avant la modification:
Les instructions DML et CTAS sur des tables avec des contraintes UNIQUE et PRIMARY KEY ne peuvent pas bénéficier d’une optimisation appliquée aux opérations DISTINCT et GROUP BY. (L’optimiseur élimine les colonnes de regroupement redondantes.)
Étant donné que l’optimisation en question n’est actuellement appliquée qu’aux instructions SELECT, elle ne présente aucun risque d’insertion de données incorrectes si la propriété RELY est défine pour une contrainte et qu’une violation de l’intégrité référentielle se produit.
- Après la modification:
Les instructions DML et CTAS sur des tables comportant des contraintes UNIQUE et PRIMARY KEY bénéficient désormais de la même optimisation que celle appliquée aux instructions SELECT.
Si la propriété RELY est définie pour une contrainte et qu’une violation de l’intégrité référentielle se produit, des données incorrectes risquent d’être insérées.
Informations générales¶
Snowflake n’applique pas l’intégrité référentielle sur les tables standard, quelles que soient les contraintes et les propriétés que vous définissez. (L’exception à cette règle concerne les tables hybrides, pour lesquelles certaines contraintes sont requises et appliquées)
La propriété de contrainte RELY déclare que vous pensez que les données de votre table ont une intégrité référentielle (ou qu’une autre application l’applique avant que les données ne soient chargées dans Snowflake). La propriété RELY doit être définie explicitement et n’est pas activée par défaut. Il est déjà documenté que le paramètre de cette propriété peut conduire à un comportement non voulu et/ou à des résultats inattendus.
Identification des tables avec la propriété de contrainte RELY¶
Pour savoir quelles sont les tables pour lesquelles la propriété RELY a été définie pour les contraintes PRIMARY KEY ou UNIQUE, exécutez la requête suivante :
SELECT table_schema, table_name
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE RELY ='YES'
AND (constraint_type = 'PRIMARY KEY' OR constraint_type = 'UNIQUE');
Envisagez de supprimer les contraintes ou de ne pas paramétrer la propriété RELY si vous prévoyez des problèmes lorsque l’optimisation prendra effet.
Réf : 1902