如果我使用 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

Redshift COPY 命令无法从 S3 加载数据

当“自动”将数据从 S3 加载到 Redshift 表中时,大小写是不是重要? [复制]

使用 COPY 功能自动将数据加载到 Redshift

错误:加载到表中 - COPY 命令中的数据无效

如何从 SQL 脚本执行 AWS S3 到 Redshift Copy 命令?