Возможно, вы захотите использовать оператор слияния для обработки того, что происходит при поступлении строки с дублирующимся PK:
create table tab1(id int primary key not null, grade varchar(10));
insert into tab1 values(1, 'A');
-- Try merging values 1, and 'B': Nothing will be added
merge into tab1 using
(select * from (values (1, 'B')) x(id, grade)) tab2
on tab1.id = tab2.id
when not matched then insert (id, grade)
values (tab2.id, tab2.grade);
select * from tab1;
-- Try merging values 2, and 'B': New row added
merge into tab1 using
(select * from (values (2, 'B')) x(id, grade)) tab2
on tab1.id = tab2.id
when not matched then insert (id, grade)
values (tab2.id, tab2.grade);
select * from tab1;
-- If instead of ignoring dupes, we want to update:
merge into tab1 using
(select * from (values (1, 'F'), (2, 'F')) x(id, grade)) tab2
on tab1.id = tab2.id
when matched then update set tab1.grade = tab2.grade
when not matched then insert (id, grade)
values (tab2.id, tab2.grade);
select * from tab1;
Для более сложных слияний вы можете захотеть исследовать потоки Snowflake (изменить таблицы сбора данных). В дополнение к документации я создал сценарий SQL, в котором рассказывается, как использовать поток для синхронизации таблиц промежуточных и промежуточных файлов c:
https://snowflake.pavlik.us/index.php/2020/01/12/snowflake-streams-made-simple