如何更改Amazon Redshift中的列排序

Mar*_*ski 6 amazon-redshift

有没有办法在Amazon Redshift(或Postgres,因为它基于它)中更改列排序?或者也许在特定位置添加一列?

在mysql中你可以做到:

ALTER TABLE MY_TABLE
ADD COLUMN {NEW_COL} AFTER {EXISTING_COL}
Run Code Online (Sandbox Code Playgroud)

但这在Redshift中不起作用.有任何想法吗?

IMS*_*SoP 8

从您的评论中,您实际需要的是能够COPY从具有特定顺序列的文件到表中.

根据COPY命令Redshift文档:

(column1 [,column2,...])

指定可选列列表以将数据字段加载到特定列中.这些列可以在COPY语句中以任何顺序排列,但是当从平面文件(例如在Amazon S3存储桶中)加载时,它们的顺序必须与源数据的顺序匹配.[...]如果未指定列列表,则该命令的行为就像指定了完整的有序列列表一样.

因此,您只需在COPY语句中指定它们,而不是重新排序表中的列,就像在文档中的一些示例中一样:

copy venue_new(venueid, venuename, venuecity, venuestate) 
from 's3://mybucket/data/venue_noseats.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'
delimiter '|';
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,更改复制命令比更改列顺序要困难得多。似乎有一种方法可以在 postgres 中做到这一点,我正在检查它是否可以在 Redshift 中工作:http://stackoverflow.com/questions/285733/how-do-i-alter-the-position-of-a- column-in-a-postgresql-database 但是,感谢您的努力 (2认同)

Mar*_*tos 6

答案是否定的,redshift 不(很容易)支持列改组,这很奇怪,因为我相信表是作为单独的列存储的。如果没有卸载/加载或表复制,就无法做到这一点。

据说卸载/加载是首选方法,因为它将利用您配置到表中的任何并行性。

因此,标准方法是必要的:

可能有一种“秘密方法”可以只使用有问题的一列(转储列、删除列、添加列、重新加载列)来做到这一点,但这听起来非常粗略,应该避免。