DML 和 CTAS 命令:设置 RELY 属性时可能会出现错误结果(待定)

注意

此行为变更在 2025_03 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

启用此行为变更捆绑包后,在目标表上设置 RELY 属性 时,对某些 DMLCTAS 语句 的优化可能会产生错误的结果:

变更前:

带有 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');
Copy

如果您预计优化生效时会出现任何问题,请考虑删除约束条件或不设置 RELY 属性。

参考:1902

语言: 中文