回答
目前我认为它不可能(希望未来会改变)。在过去,当我遇到这种情况时,我创建了一个新表并将旧数据复制到其中。
从http://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html:
ADD [COLUMN]列名 添加具有指定名称表中的一列。您可以在每个ALTER TABLE语句中只添加一列。
您不能添加作为表的分配键(DISTKEY)或排序键(SORTKEY)的列。
不能使用ALTER TABLE ADD COLUMN命令如下表和列修改属性:
UNIQUE
PRIMARY KEY
引用(外键)
IDENTITY
最大列名长度为127个字符;较长的名称被截断为127个字符。您可以在单个表格中定义的最大列数是1,600。
正如Yaniv Kessler所说,创建表后不能添加或更改distkey和sort键,并且必须重新创建表并将所有数据复制到新表中。 您可以使用以下SQL格式重新创建具有新设计的表格。
ALTER TABLE test_table RENAME TO old_test_table;
CREATE TABLE new_test_table([new table columns]);
INSERT INTO new_test_table (SELECT * FROM old_test_table);
ALTER TABLE new_test_table RENAME TO test_table;
DROP TABLE old_test_table;
根据我的经验,这个SQL用于不仅改变distkey和排序关键字,而且还设置了编码(压缩)型。
要添加到Yaniv的答案,理想的方法是使用CREATE TABLE AS命令。您可以明确指定distkey和sortkey。即
CREATE TABLE test_table_with_dist
distkey(field)
sortkey(sortfield)
AS
select * from test_table
其他例子:
http://docs.aws.amazon.com/redshift/latest/dg/r_CTAS_examples.html
编辑
我注意到,这个方法不保留编码。 Redshift仅在复制语句期间自动编码。如果这是一个持久表,您应该重新定义该表并指定编码。
create table test_table_with_dist(
field1 varchar encode row distkey
field2 timestam pencode delta sortkey);
insert into test_table select * from test_table;
你可以计算出运行analyze compression test_table;
我跟着这个方法添加排序列到我的表table_transactons其或多或少相同的方法只有命令的数量较少使用哪种编码。
1)alter table table_transactions rename to table_transactions_backup; 2)创建表table_transactions复合sortkey(key1,key2,key3,key4)作为select * from table_transactions_backup; 3)drop table table_transactions_backup;
- 1. 使用Unix排序排序多个键
- 2. 使用键排序数组
- 3. 如何使用'键'进行排序:C
- 4. 如何使用递减键排序TreeMap?
- 5. 如何使用排序阵列2键
- 6. 排序使用Linux命令
- 7. 使用uniq命令(排序)
- 8. 排序键
- 9. 排序键
- 10. 主键排序
- 11. 按键排序
- 12. 如何排序日期键
- 13. 如何排序键的NSArray?
- 14. 使用alter命令添加外键到复合主键显示错误1215
- 15. 在RDD中排序键
- 16. 在字典中排序键
- 17. 如何在Swift中排序字典键?
- 18. 在Perl中,如何使用自定义排序对散列键进行排序?
- 19. 排序数组键?
- 20. 外键列排序
- 21. 排序的关键
- 22. 排序字典键
- 23. 排序外键表
- 24. 按主键排序
- 25. 排序NsmutableArray有键
- 26. 排序的关键
- 27. 排序主键JDBC
- 28. 3键排序 - Javascript
- 29. 按键排序Cassandra
- 30. 与排序命令
这是最好的答案。我可能会补充说,在操作完成后执行表重命名可能更安全。 –
这很晚了,但我处于相同的情况,并且我已经做了一些挖掘,以了解这种类型的操作的性能,假设表很大。 Redshift文档提到应谨慎使用INSERT INTO,以支持COPY或CREATE TABLE AS命令。 [CTAS示例](http://docs.aws.amazon.com/redshift/latest/dg/r_CTAS_examples.html)明确提到了这个问题。 – paulsef11
这种方法的问题是,如果您的视图取决于原始表格,则放置不起作用。 – Pasha