我目前正在开发一个使用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附加内容,例如编码。
答案 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从旧表顺序中选择*)