Amazon redshift 为什么红移复制查询会为具有排序键的表使用(更多)磁盘空间

Amazon redshift 为什么红移复制查询会为具有排序键的表使用(更多)磁盘空间,amazon-redshift,Amazon Redshift,我在S3上有大量数据,以数百个CSV文件的形式存在,这些文件的总容量约为1.7 TB(未压缩)。我试图将其复制到红移集群上的空表中 集群是空的(没有其他表),有10个dw2.1大型节点。如果我在表上设置了排序键,那么copy命令将在整个过程中占用大约25%的所有可用磁盘空间,并中止。如果没有排序键,则复制将成功完成,并且不会使用超过45%的可用磁盘空间。无论我是否设置了分发密钥,此行为都是一致的 我真的不知道为什么会发生这种情况,或者这是意料之中的。有人见过这种行为吗?如果是这样的话,你有什么建

我在S3上有大量数据,以数百个CSV文件的形式存在,这些文件的总容量约为1.7 TB(未压缩)。我试图将其复制到红移集群上的空表中

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


我真的不知道为什么会发生这种情况,或者这是意料之中的。有人见过这种行为吗?如果是这样的话,你有什么建议可以绕过它吗?一个想法是尝试单独导入每个文件,但我希望找到一种方法,让Redshift自己处理该部分,并在一个查询中完成所有操作。

每个dw2.large box都有0.16 TB的磁盘空间。当您说您有10个节点的集群时,总可用空间约为1.6 TB。 您已经提到,您有大约1.7 TB的原始数据(未压缩)要以红移方式加载

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

Select "column", type, encoding 
from pg_table_def where tablename = 'my_table_name'
在表没有排序键的情况下加载数据后。查看正在应用的压缩是什么。 我建议您在每次加载测试数据时删除并创建表,以便每次分析压缩编码。使用复制命令加载表后,请参阅下面的链接和激发脚本以确定表大小

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

因为不带排序键的表比带排序键的表需要更少的磁盘空间

您需要确保对表应用了压缩


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

从红移团队得到了答案。集群需要至少为传入数据大小2.5倍的可用空间作为排序的临时空间。您可以升级群集,复制数据,然后将其向下调整。

2.5倍于传入数据的大小?这似乎很荒谬。它不是要插入的行数的常数倍,但它实际上取决于行的大小?我们在这方面也遇到了一些主要问题。我们的集群在导入开始时的磁盘使用率为40%,一直到100%,有时甚至会导致导入崩溃,这看起来很可笑。