2015-04-01 105 views
0

我在Redshift中有一個表格。將自動增量列添加到現有的紅移表中

我想添加一個應該有增量值的列。我不想放下桌子並創建一個新桌子。

請建議在紅移表中添加具有自動增量值的列的命令。

謝謝!

+0

參見[我的回答如下(http://stackoverflow.com/a/40212352/1265306)ALTER TABLE APPEND(http://docs.aws.amazon.com/redshift/latest /dg/r_ALTER_TABLE_APPEND.html)的作品! – naviram 2016-10-24 06:58:02

回答

1

無法將IDENTITY列添加到現有表中。

用新的IDENTITY列創建一個新表可能是最容易的,並將數據複製到其中。請注意,這些值不保證單調遞增 - 即可能存在間隙。

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

不能使用ALTER TABLE ADD COLUMN命令來修改以下 表和列屬性:

UNIQUE

PRIMARY KEY

參考(國外鍵)

IDENTITY

1

使用CREATE TABLE添加新的表標識列,然後使用ALTER TABLE APPEND與FILLTARGET修改,然後刪除原始表和重命名新表是非常快速和簡單。

如果目標表包含源 表中不存在的列,請包括FILLTARGET。該命令使用缺省列值或IDENTITY值填充 源表中的額外列,如果定義了一個值,則填充爲 ,或填充NULL。

它將列從一個表移動到另一個表,速度非常快,在dc1.large節點中佔用了4個1GB表。

通過移動現有源 表中的數據,將行追加到目標表。
...
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) 
相關問題