Snowflake 提供了
Unique
约束,但实际上并没有强制执行它。我下面有一个示例,通过测试表显示了这一点。
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
对于其他方面,它也为数据分析工具提供信息,如 Kirby 提供的链接中已经提到的
创建约束的目的,即使不强制执行,也是向数据用户声明您的期望。
您还可以使用此元数据来生成审核查询,例如:
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 现在支持作为预览功能执行,尽管会付出性能成本。