自动增量跳过雪花中带有合并语句的序列
Auto increment skip the sequence with merge statemnt in snowflake
我正在处理一个需要实施代理键的用例。我有一个应该自动递增 1 的列 ID,但是当我使用合并时它会跳过 2 到 4 序列。
create or replace table auto_increment(id int primary key autoincrement start 1 increment 1,name varchar(50),city varchar(50));
create or replace table emp(name varchar(50),city varchar(50));
create or replace stream emp_stream on table emp;
insert into emp values('salman','mumbai'),('akshay','pune'),('aamir','mumbai');
merge into auto_increment as a
using emp_stream as e
on e.name=a.name
when matched then update
set a.name=e.name,
a.city=e.city
when not matched then insert (name,city) values(e.name,e.city);
select * from auto_increment;
ID
1
2
3
insert into emp values('aamir','chennai'),('akshay','mumbai'),('ranjikant','chennai'),('mahesh babu','hyderabad');
merge into auto_increment as a
using emp_stream as e
on e.name=a.name
when matched then update
set a.name=e.name,
a.city=e.city
when not matched then insert (name,city) values(e.name,e.city);
select * from auto_increment;
ID
1
2
3
6
7
为什么它跳过了 4,5?当我再次使用 merge 时,它在序列中给出了更多的间隙。
这里已经回答了:
MERGE command results in gaps in sequence numbers
根据 Snowflake 文档,Snowflake 不保证序列中没有间隙。
https://docs.snowflake.net/manuals/user-guide/querying-sequences.html.
我可以说 Snowflake 开发团队正在努力改进 MERGE 语句的序列。
我正在处理一个需要实施代理键的用例。我有一个应该自动递增 1 的列 ID,但是当我使用合并时它会跳过 2 到 4 序列。
create or replace table auto_increment(id int primary key autoincrement start 1 increment 1,name varchar(50),city varchar(50));
create or replace table emp(name varchar(50),city varchar(50));
create or replace stream emp_stream on table emp;
insert into emp values('salman','mumbai'),('akshay','pune'),('aamir','mumbai');
merge into auto_increment as a
using emp_stream as e
on e.name=a.name
when matched then update
set a.name=e.name,
a.city=e.city
when not matched then insert (name,city) values(e.name,e.city);
select * from auto_increment;
ID
1
2
3
insert into emp values('aamir','chennai'),('akshay','mumbai'),('ranjikant','chennai'),('mahesh babu','hyderabad');
merge into auto_increment as a
using emp_stream as e
on e.name=a.name
when matched then update
set a.name=e.name,
a.city=e.city
when not matched then insert (name,city) values(e.name,e.city);
select * from auto_increment;
ID
1
2
3
6
7
为什么它跳过了 4,5?当我再次使用 merge 时,它在序列中给出了更多的间隙。
这里已经回答了:
MERGE command results in gaps in sequence numbers
根据 Snowflake 文档,Snowflake 不保证序列中没有间隙。
https://docs.snowflake.net/manuals/user-guide/querying-sequences.html.
我可以说 Snowflake 开发团队正在努力改进 MERGE 语句的序列。