为什么 Teradata 标识列不递增 1?
Why doesn't Teradata identity column increment by 1?
我有以下table
CREATE SET TABLE myTab,FALLBACK,NO BEFORE JOURNAL,NO AFTER JOURNAL,CHECKSUM = DEFAULT,DEFAULT MERGEBLOCKRATIO
(
my_id BIGINT GENERATED ALWAYS AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 922337203685477580
NO CYCLE),
created_by VARCHAR(200) )
UNIQUE PRIMARY INDEX ( my_id );
当我开始插入这个 table 时(INSERT INTO myTab (created_by) VALUES ('test')
,这是自动生成的 my_id
的值
my_id
1
100,001
100,002
200,001
300,001
400,001
500,001
500,002
600,001
我想得到 1,2,3 。 . .加 1。我读了 teradata explanation 但还是不明白。为什么它会增加一个随机数?这样我很快就会到达 MAXVALUE 922337203685477580
。那么会发生什么?
我相信您正在寻找的解释可以在 SQL 数据定义语言 - 详细主题的第 5 章:创建 Table、Process for Generating Identity Column Numbers 中找到。标识列无意提供将行加载到 table 中的准确顺序。
如果你想要一个顺序标识符,你必须自己在你的 ETL 中维护它,结合 table 中的最大值加上分配给你的数据集的 ROW_NUMBER()
加载到 table。否则,您可能需要重新考虑在您的实现中是否确实需要序列 id/row num。
我有以下table
CREATE SET TABLE myTab,FALLBACK,NO BEFORE JOURNAL,NO AFTER JOURNAL,CHECKSUM = DEFAULT,DEFAULT MERGEBLOCKRATIO
(
my_id BIGINT GENERATED ALWAYS AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 922337203685477580
NO CYCLE),
created_by VARCHAR(200) )
UNIQUE PRIMARY INDEX ( my_id );
当我开始插入这个 table 时(INSERT INTO myTab (created_by) VALUES ('test')
,这是自动生成的 my_id
的值
my_id
1
100,001
100,002
200,001
300,001
400,001
500,001
500,002
600,001
我想得到 1,2,3 。 . .加 1。我读了 teradata explanation 但还是不明白。为什么它会增加一个随机数?这样我很快就会到达 MAXVALUE 922337203685477580
。那么会发生什么?
我相信您正在寻找的解释可以在 SQL 数据定义语言 - 详细主题的第 5 章:创建 Table、Process for Generating Identity Column Numbers 中找到。标识列无意提供将行加载到 table 中的准确顺序。
如果你想要一个顺序标识符,你必须自己在你的 ETL 中维护它,结合 table 中的最大值加上分配给你的数据集的 ROW_NUMBER()
加载到 table。否则,您可能需要重新考虑在您的实现中是否确实需要序列 id/row num。