как мы можем создать первичные ключи в таблице - PullRequest
0 голосов
/ 11 апреля 2020

Как я могу создать первичный ключ в таблице. Я использовал следующую команду для ее создания, но ключ, похоже, не применяется:

ALTER TABLE tablename ADD PRIMARY KEY (column1,column3);

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Snowflake поддерживает определение и поддержание ограничений, но не применяет их, за исключением ограничений NOT NULL, которые применяются всегда.

https://docs.snowflake.com/en/sql-reference/constraints-overview.html#supported -constraint-types

0 голосов
/ 13 апреля 2020

Хотя первичный ключ не применяется в 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.

...