如何复制Redshift表但是向列添加排序键?

时间:2014-08-25 23:45:37

标签: sql postgresql amazon-redshift

我目前正在开发一个使用51列Redshift表的项目。但是,制作该表的人忘记在我们的time列中添加排序键,如果我们不添加它,将会损害我们用例的性能。

如何使用time列作为排序键来创建表格版本?我知道你是can't make a column a sortkey if its a member of an existing table,但我希望有一种方法可以做到并不需要手工写出CREATE TABLE语法;例如,这样的事情会很好:

timecube=# CREATE TABLE foo (like bar) sortkey(time);
ERROR:  CREATE TABLE LIKE is not supported with DISTSTYLE, DISTKEY(), or SORTKEY() clauses

但你可以看到它不受支持。还有另外一种方法吗?由于我们仍在开发中,因此我们不需要任何现有数据。

使用pgdump等传统工具效果不佳,因为它们不包含任何Redshift附加内容,例如编码。

2 个答案:

答案 0 :(得分:10)

Redshift支持在CREATE TABLE AS语句中指定DIST和SORT键,as per the docs.

CREATE TABLE table_name
DISTSTYLE KEY
DISTKEY ( column )
SORTKEY ( column )
AS 
(SELECT * 
FROM source_table)
;

答案 1 :(得分:0)

第一步,您需要对现有表使用get create table语句。然后创建新表,这次将排序键添加到新表。

检查旧表的编码(当使用复制命令加载数据时,它会自动添加压缩编码)

select "column", type, encoding 
from pg_table_def where tablename = 'old_table'

为每列创建新表时添加编码类型。使用Sort键创建表。

创建新表后,请使用以下命令

插入新表(按时间asc从旧表顺序中选择*)