Snowflake 查询中未抛出唯一键约束错误

Unique Key constraint error not thrown in Snowflake queries

在 Postgres 中,当我们尝试使用相同的唯一键组合重新插入记录时,会抛出唯一键约束错误。

但是在 Snowflake 中,不会抛出错误并且允许重复(即使在查询中添加 ENFORCED 关键字之后)

create table DUMMY(  ONE integer autoincrement start 1 increment 1, TWO integer NOT NULL, THREE varchar(7) NOT NULL, FOUR varchar(7) NOT NULL  )

ALTER TABLE DUMMY ADD CONSTRAINT UNIQUENESS UNIQUE(TWO, THREE) ENFORCED;

数据库输出:

Snowflake 自称为数据库。但事实并非如此。

https://docs.snowflake.com/en/sql-reference/constraints-overview.html

Snowflake supports defining and maintaining constraints, but does not enforce them, except for NOT NULL constraints, which are always enforced

完全个人意见:

ADD CONSTRAINT UNIQUENESS UNIQUE(TWO, THREE) ENFORCED;

是免费的午餐。你在告诉数据库,我要把东西放进你,每次我这样做,运行 这些都会帮我检查。

当您扩展到非常大的表时,此类检查会降低性能,原因有二。数据库应该如何最佳地执行。如果它做同样的检查比它需要的多怎么办。在其他数据库中,您可以关闭检查,您经常这样做,以获得更大的转换操作的性能。

Where-as 在 Snowflake 中你 can/have 来管理它。有人认为这是诅咒,我认为这是祝福。您可以 de-dup 您的数据“进入”,然后就可以使用它了。

DML 的原因是它允许现有脚本“工作”。但如果现有流程依赖异常,则有不利的一面。但公平地说,如果你正在加载 1B 行,你如何正确处理 3 个重复。

de-dup您的数据有很多种方法,根据我们的经验,我们发现对于大量数据类型,我们根据对形状的了解使用专用表 de-dup 我们的输入数据数据和 when/where 重复的流程发生了。