【问题标题】:Why doesn't Teradata identity column increment by 1?为什么 Teradata 标识列不增加 1?
【发布时间】:2015-11-12 00:27:15
【问题描述】:

我有下表

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 );  

当我开始插入此表时(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。那时会发生什么?

【问题讨论】:

  • 即使那个东西以百万计(这里以十万计)并且从未以小于一百万的数字迭代,您也不会用完数字。就像......即使数到 100 万,你仍然有 1 万亿个数字要处理。
  • 谢谢。那讲得通。但我还是不明白为什么要这样做?如果它现在增加 100K,谁知道它明天可能会开始增加 100B。 Teradata 如何确定增量值?是随机的吗?
  • 还有INCREMENT BY 1有什么用。 . .这个命令(如果你愿意的话)有什么不同吗

标签: teradata


【解决方案1】:

我相信您正在寻找的解释可以在 SQL 数据定义语言 - 第 5 章下的详细主题中找到:创建表,Process for Generating Identity Column Numbers。标识列并非旨在提供将行加载到表中的准确顺序。

如果您想要一个顺序标识符,您必须自己在 ETL 中使用表中的最大值加上分配给您正在加载到表中的数据集的 ROW_NUMBER() 的组合来维护它。否则,您可能需要重新考虑在您的实现中是否确实需要序列 ID/行数。

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2013-08-12
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多