Snowflake的Unique约束有什么意义?

问题描述 投票:0回答:2

Snowflake 提供了

Unique
约束,但实际上并没有强制执行它。我下面有一个示例,通过测试表显示了这一点。

  1. 有什么意义,约束会增加什么价值?
  2. 人们使用什么解决方法来避免重复?我可以在每次插入之前执行查询,但这似乎是不必要的使用。
CREATE OR REPLACE TABLE dbo.Test
(
  "A" INT NOT NULL UNIQUE,
  "B" STRING NOT NULL
);

INSERT INTO dbo.Test
VALUES (0, 'ABC');

INSERT INTO dbo.Test
VALUES (0, 'DEF');

SELECT *
FROM dbo.Test;

1. A, B
2. 0, ABC
3. 0, DEF
constraints unique snowflake-schema
2个回答
1
投票
  1. 首先,雪花在这个世界上并不孤单。因此,数据被导入和导出,虽然 Snowflake 不强制执行约束,但其他一些系统可能会执行这些约束,这样它们在穿过 Snowflake 时就不会丢失

对于其他方面,它也为数据分析工具提供信息,如 Kirby 提供的链接中已经提到的

  1. 请记住,执行是连续的,因此在每个查询之前运行检查仍然会在高并发情况下导致重复。为了完全避免重复,您需要运行合并(这无疑会更慢)或在加载后手动删除“过多”数据

0
投票

创建约束的目的,即使不强制执行,也是向数据用户声明您的期望。

您还可以使用此元数据来生成审核查询,例如:

show imported keys in database your_database
;
select
'select * from ' ||
"fk_schema_name" || '.' || "fk_table_name" ||
' where ' ||
"fk_column_name" ||
' is not null and ' ||
"fk_column_name" ||
' not in (select ' ||
"pk_column_name" ||
' from ' ||
"pk_schema_name" || '.' || "pk_table_name" ||
');'
from table(result_scan(last_query_id()))
order by 1
;

此问题发布多年后,Snowflake 现在支持作为预览功能执行,尽管会付出性能成本。

© www.soinside.com 2019 - 2024. All rights reserved.