我们如何在 table 中创建主键
how we can Create Primary Keys in a table
如何在 table 中创建主键。我使用以下命令创建了一个,但密钥似乎没有被强制执行:
ALTER TABLE tablename ADD PRIMARY KEY (column1,column3);
Snowflake 支持定义和维护约束,但不强制执行它们,但始终强制执行的 NOT NULL 约束除外。
https://docs.snowflake.com/en/sql-reference/constraints-overview.html#supported-constraint-types
虽然在 Snowflake 中不强制执行主键,但您可以使用 MERGE 语句插入数据以强制该键的唯一性。这种方法需要确保源数据集不包含重复项,例如使用 QUALIFY 函数。
示例:
CREATE TABLE IF NOT EXISTS test (
col1 VARCHAR(50) NOT NULL,
col2 VARCHAR(50),
col3 VARCHAR(50) NOT NULL,
constraint PK_test primary key (col1, col3) not enforced
);
MERGE INTO TEST AS tgt
USING (
SELECT COL1, COL2, COL3 FROM (
SELECT 'a' COL1, 'b' COL2, 'a' COL3
UNION
SELECT 'a' COL1, 'c' COL2, 'a' COL3
UNION
SELECT 'a' COL1, 'd' COL2, 'a' COL3)
QUALIFY row_number() over (partition by COL1, COL3 order by COL2) = 1
)AS src
ON (tgt.COL1=src.COL1 AND tgt.COL3=src.COL3)
WHEN NOT MATCHED
THEN INSERT (COL1, COL2, COL3)
VALUES (src.COL1, src.COL2, src.COL3);
只插入了行a,b,a。
如何在 table 中创建主键。我使用以下命令创建了一个,但密钥似乎没有被强制执行:
ALTER TABLE tablename ADD PRIMARY KEY (column1,column3);
Snowflake 支持定义和维护约束,但不强制执行它们,但始终强制执行的 NOT NULL 约束除外。
https://docs.snowflake.com/en/sql-reference/constraints-overview.html#supported-constraint-types
虽然在 Snowflake 中不强制执行主键,但您可以使用 MERGE 语句插入数据以强制该键的唯一性。这种方法需要确保源数据集不包含重复项,例如使用 QUALIFY 函数。
示例:
CREATE TABLE IF NOT EXISTS test (
col1 VARCHAR(50) NOT NULL,
col2 VARCHAR(50),
col3 VARCHAR(50) NOT NULL,
constraint PK_test primary key (col1, col3) not enforced
);
MERGE INTO TEST AS tgt
USING (
SELECT COL1, COL2, COL3 FROM (
SELECT 'a' COL1, 'b' COL2, 'a' COL3
UNION
SELECT 'a' COL1, 'c' COL2, 'a' COL3
UNION
SELECT 'a' COL1, 'd' COL2, 'a' COL3)
QUALIFY row_number() over (partition by COL1, COL3 order by COL2) = 1
)AS src
ON (tgt.COL1=src.COL1 AND tgt.COL3=src.COL3)
WHEN NOT MATCHED
THEN INSERT (COL1, COL2, COL3)
VALUES (src.COL1, src.COL2, src.COL3);
只插入了行a,b,a。