DML 和 CTAS 命令:设置 RELY 属性时可能会出现错误结果(待定)¶
启用此行为变更捆绑包后,在目标表上设置 RELY 属性 时,对某些 DML 和 CTAS 语句 的优化可能会产生错误的结果:
- 变更前:
带有 UNIQUE 和 PRIMARY KEY 约束条件 的表上的 DML 和 CTAS 语句不符合应用于 DISTINCT 和 GROUP BY 操作的优化。(优化器会删除冗余的分组列。)
由于所讨论的优化目前仅应用于 SELECT 语句,因此如果将 RELY 属性设置为约束条件并且出现违反参照完整性的情况,则优化不会带来插入错误数据的风险。
- 变更后:
现在,带有 UNIQUE 和 PRIMARY KEY 约束条件的表上的 DML 和 CTAS 语句符合应用于 SELECT 语句的相同优化。
如果为约束条件设置了 RELY 属性并且发生了违反参照完整性的情况,则可能会插入不正确的数据。
背景信息¶
无论您定义了何种约束条件和属性,Snowflake 都不会对标准表强制执行 参照完整性。(此规则的例外情况是 混合表,该表需要并强制执行某些约束条件。)
RELY 约束条件属性声明,您认为您的表数据具有参照完整性(或者在数据加载到 Snowflake 之前,另一个应用程序正在强制执行该数据)。RELY 属性必须显式设置,且默认情况下不启用。已经有记录表明,设置此属性可能会导致意外行为和/或意外结果。
使用 RELY 约束条件属性识别表¶
要找出哪些表为 PRIMARY KEY 设置了 RELY 属性或 UNIQUE 约束条件,请运行此查询:
SELECT table_schema, table_name
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE RELY ='YES'
AND (constraint_type = 'PRIMARY KEY' OR constraint_type = 'UNIQUE');
如果您预计优化生效时会出现任何问题,请考虑删除约束条件或不设置 RELY 属性。
参考:1902