如果我使用 COPY 命令将数据从 S3 加载到 Redshift,它会遵循我的 dist 样式和键吗?
Posted
技术标签:
【中文标题】如果我使用 COPY 命令将数据从 S3 加载到 Redshift,它会遵循我的 dist 样式和键吗?【英文标题】:if I load data from S3 to Redshift using the COPY command, will it follow my dist style and keys? 【发布时间】:2018-12-17 18:21:07 【问题描述】:背景:在 Redshift 中,我想将分布键添加到具有标识列的现有表中,就像在 this question 中一样。
我对那个问题的答案感到困惑——我认为要根据某个 dist 键存储我的表数据,我必须插入数据,我不能只是从未分发的表中复制或附加。从 S3 复制时这有什么不同吗?
【问题讨论】:
【参考方案1】:在您链接的问题上有一些有趣的方法!
您不能将分发键添加到现有表中。您需要创建一个新表,然后复制数据。这可以通过INSERT INTO new-table SELECT * FROM old-table
完成。
当数据被加载到 Amazon Redshift 表中时,它总是遵循分发键,因为 DISTKEY
确定哪个切片存储数据。无论您使用COPY
(首选)还是INSERT
,数据将始终按照DISTKEY
分发。
SORTKEY
也将在通过COPY
加载数据时使用,但不会重新排序现有数据。例如,如果您有一列数据已经按字母顺序加载,那么新加载的行将添加到现有数据的 end 中。这些新数据将被排序,但作为一个整体的列将不会被排序。使用VACUUM
命令重新排序整个表。
您应该尽可能使用COPY
命令将数据加载到 Redshift 表中。这允许 Redshift 使用所有节点并行加载数据。尽量减少通过INSERT
加载的数据量——最好使用这种方法加载多行。尽量避免 INSERT
单行,这在 Redshift 中与批量加载相比效率非常低。
【讨论】:
以上是关于如果我使用 COPY 命令将数据从 S3 加载到 Redshift,它会遵循我的 dist 样式和键吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 S3 中运行 COPY 命令以将 gzip-ed 数据加载到 Redshift