我正在尝试在 Snowflake 中创建一个序列作为表 ID,我需要它以 1 增加 1(1,2,3,4,...),但是当我创建它并尝试
sequence.nextval
时增加(1,101,201,301...),我不知道为什么。
我正在使用下一个代码来创建序列(我正在使用 sysadmin 和正确的数据库)
CREATE OR REPLACE SEQUENCE SEQ_AUTHOR_UID
START WITH 1
INCREMENT BY 1;
COMMENT= 'Use this to fill in AUTHOR_UID';
我也尝试过:
CREATE SEQUENCE SEQ_AUTHOR_UID
START = 1
INCREMENT = 1
COMMENT = 'Use this to fill in AUTHOR_UID';
根据 NickW 所指的文件:
重要
Snowflake 不保证生成无间隙的序列号。生成的数字不一定是连续的。
序列仅保证大于检索到的先验值,这称为单调函数,它保留顺序。
这意味着您可以判断,如果一个序列是 < it came before, and thus also if >,那么它就位于相关行之后。要获得无间隙的数字,您需要使用
ROW_NUMBER() over (ORDER BY sequence_id)
。
这有一个问题,你每次都必须在读取时执行此操作。
您可以使用 UPDATE 写入整个表以获得稳定的数字,但这存在一个问题,如果删除任何行,现在就会有间隙。这可能就是您想要无间隙数字的原因,但如果是这种情况,那么使用 Stream 来监控表格更有意义。或者,如果您需要更长的寿命间隙检测,请使用辅助表,并在 INSERT 或 DELETE 逻辑上进行插入,具体取决于您期望表的写入更改/读取工作的平衡。