将自动增量列添加到现有的redshift表中

时间:2015-04-01 08:15:41

标签: amazon-redshift

我在Redshift有一张桌子。

我想添加一个应该具有增量值的列。我不想放弃桌子并创建一个新桌子。

请建议在redshift表中添加具有自动增量值的列的命令。

谢谢!!!

2 个答案:

答案 0 :(得分:1)

无法将IDENTITY列添加到现有表中。

使用新的IDENTITY列创建新表可能最简单,并将数据复制到其中。请注意,这些值不能保证单调增加 - 即可能存在间隙。

来自http://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html

  

您无法使用ALTER TABLE ADD COLUMN命令修改以下内容   表和列属性:

     

UNIQUE

     

PRIMARY KEY

     

参考(外键)

     

IDENTITY

答案 1 :(得分:1)

使用CREATE TABLE添加带有标识列的新表,然后使用带有FILLTARGET修饰符的ALTER TABLE APPEND,然后删除原始表并重命名新表,它非常快速和简单。

  

如果目标表包含源中不存在的列   表,包括FILLTARGET。该命令填充了额外的列   源表具有默认列值或IDENTITY值,   如果定义了一个,或者为NULL。

它将列从一个表移动到另一个表,非常快,在dc1.large节点中为1GB表占用了4s。

  

通过从现有源移动数据将行添加到目标表   表。
  ...
  ALTER TABLE APPEND通常比类似的CREATE TABLE快得多   AS或INSERT INTO操作,因为数据被移动,而不是重复。

/* This is your table to be modified */
CREATE TABLE t_original (a varchar);
INSERT INTO t_original VALUES ('v1'), ('v2');

/* Here are the steps to add IDENTITY column */
CREATE TABLE t_new (id  BIGINT IDENTITY(0,1), a varchar);
ALTER TABLE t_new APPEND FROM t_original FILLTARGET;
DROP TABLE t_original;
ALTER TABLE t_new RENAME TO t_original;

/* Show the result */
SELECT * FROM t_original;
 id | a
----+----
  1 | v2
  0 | v1
(2 rows)