zoukankan      html  css  js  c++  java
  • Vertica系列: 自动生成Identity 字段值的方法

    参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/

    在 vertica 中有三种定义 identity 字段的方法, 分别是使用 AUTO_INCREMENTIDENTITYsequence.

    简单对比:

    • AUTO_INCREMENT 同 SQL Server 的概念一样, sequence 和 Oracle 的概念是一样.
    • AUTO_INCREMENT 或 IDENTITY 字段都是直接在表定义时设定的, sequence 是一个独立的对象.
    • AUTO_INCREMENT 可以设定的参数最少, 不能设定起始值和增量.
    • IDENTITY 可设定的参数稍微多一些, 能设定起始值和增量.
    • sequence 可设定的参数很多.
    • 从使用的方便性看 AUTO_INCREMENT 或 IDENTITY 最方便了, 但灵活性不如 sequence.

    推荐使用 sequence 作为 id 栏位, 尽量不要用 AUTO_INCREMENT 或 IDENTITY, 原因有:

    1. 如果某个表有 AUTO_INCREMENT 或 IDENTITY 栏位, 在有删除记录的情况下, 再复制一个新表, 新表 id 和 原表 id 就不一致了, 这往往不是我们期望的.
    2. Vertica 建表 DDL 中, 可以为 id 栏位设定默认值为某个 sequence, 这样方便性就和 AUTO_INCREMENT 或 IDENTITY 一样了.
    3. Sequence 可以有更多的调优手段, 比如某个表经常要做 bulk copy, 可以为 seq 设定较大的 cache, 以提升 copy 的速度, 如果表的插入频率不大, 可以将 seq 的 cache 设的小一些, 以减少内存的使用.

    在数仓项目中, 推荐为不同的 table 设置不同的 sequence, 不要共用, 原因就是上面的 #3.

    下面是一个同时使用 seq 和 AUTO_INCREMENT 的示例:

    create sequence mydb.my_seq;
    CREATE TABLE mydb.test2 (
      id1 numeric(38,0) DEFAULT NEXTVAL('my_seq')
      ,id2 AUTO_INCREMENT
      )
      SEGMENTED BY HASH(id1) ALL NODES;
      ;
    
  • 相关阅读:
    17. Letter Combinations of a Phone Number
    16. 3Sum Closest
    15. 3Sum
    14. Longest Common Prefix
    13. Roman to Integer
    12. Integer to Roman
    11. Container With Most Water
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/harrychinese/p/vertica_id_column.html
Copyright © 2011-2022 走看看