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;
      ;
    
  • 相关阅读:
    【Python】异常处理
    【Python】写入文件
    【Python】从文件中读取数据
    【Python】导入类
    【Python】继承
    【Python】使用类和实例
    SQL HAVING
    SQL GROUP BY
    SQL ORDER BY
    SQL CREATE INDEX
  • 原文地址:https://www.cnblogs.com/harrychinese/p/vertica_id_column.html
Copyright © 2011-2022 走看看