为什么Redshift COPY查询会为具有排序键的表使用(更多)磁盘空间

时间:2014-10-13 04:04:59

标签: amazon-redshift

我在S3上有大量数据,其中包含几百个CSV文件,总共约1.7 TB(未压缩)。我试图将它复制到Redshift集群上的空表。

群集为空(没有其他表)并且有10个dw2.large节点。如果我在表上设置了排序键,则复制命令会占用所有可用磁盘空间大约25%,并中止。如果没有排序键,则副本成功完成,并且永远不会使用超过45%的可用磁盘空间。无论我是否也设置分发密钥,此行为都是一致的。

我真的不知道为什么会发生这种情况,或者是否预料到了。有没有人见过这种行为?如果是这样,你对如何绕过它有任何建议吗?一个想法是尝试单独导入每个文件,但我喜欢找到一种方法让Redshift处理该部分本身并在一个查询中完成所有操作。

2 个答案:

答案 0 :(得分:9)

从Redshift团队得到了答案。群集需要至少为传入数据大小2.5倍的可用空间,以用作排序的临时空间。您可以升迁群集,复制数据并将其重新调整大小。

答案 1 :(得分:0)

每个dw2.large框都有0.16 TB的磁盘空间。当你说你有10个节点的集群时,可用的总空间大约是1.6 TB。 您已经提到过,您有大约1.7 TB的原始数据(未压缩)要加载到redshift中。

使用复制命令将数据加载到redshift时,redshift会自动压缩数据并加载表。 加载任何db表后,您可以通过以下查询

查看压缩编码
Select "column", type, encoding 
from pg_table_def where tablename = 'my_table_name'

当表没有排序键时加载数据。查看正在应用的压缩内容。 我建议你每次加载测试数据时都要删除并创建表格。每次都会分析压缩编码。一旦你使用复制命令加载你的表,请参阅下面的链接和fire脚本以确定表格大小

http://docs.aws.amazon.com/redshift/latest/dg/c_analyzing-table-design.html

因为当您对表应用排序键并加载数据时,排序键也会占用一些磁盘空间。

由于带有排序键的表比使用排序键的表需要更少的磁盘空间。

您需要确保将压缩应用于表。

当我们应用排序键时,需要更多空间来存储。当您应用排序键时,您需要检查是否按排序顺序加载数据,以便数据以排序的方式存储。我们需要避免 vacuum 命令在加载数据后对表进行排序。

相关问题