雪花序列问题

问题描述 投票:0回答:1

我正在尝试在 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';

在此输入图片描述

snowflake-cloud-data-platform snowflake-schema
1个回答
0
投票

根据 NickW 所指的文件:

重要

Snowflake 不保证生成无间隙的序列号。生成的数字不一定是连续的。

序列仅保证大于检索到的先验值,这称为单调函数,它保留顺序。

这意味着您可以判断,如果一个序列是 < it came before, and thus also if >,那么它就位于相关行之后。要获得无间隙的数字,您需要使用

ROW_NUMBER() over (ORDER BY sequence_id)

这有一个问题,你每次都必须在读取时执行此操作。

您可以使用 UPDATE 写入整个表以获得稳定的数字,但这存在一个问题,如果删除任何行,现在就会有间隙。这可能就是您想要无间隙数字的原因,但如果是这种情况,那么使用 Stream 来监控表格更有意义。或者,如果您需要更长的寿命间隙检测,请使用辅助表,并在 INSERT 或 DELETE 逻辑上进行插入,具体取决于您期望表的写入更改/读取工作的平衡。

© www.soinside.com 2019 - 2024. All rights reserved.