【发布时间】:2016-05-10 17:27:21
【问题描述】:
作为 ETL 过程的一部分,我在 RedShift 中创建了许多小型临时表。每个表有 50-100 行(平均)约 100 列。当我查询每个临时表需要多少磁盘空间时,所有列都占用了完全相同的空间量。占用的空间量远远超过所需的空间量。例如,6 MB 代表 59 个 BOOLEAN 值。我尝试了多种排列方式:
- 列数据类型(varchar、timestamp 等)
- 列编码(lzo、bytedict 等)
- 加载样式(单独插入、深拷贝等)
- 在上述所有步骤之间重复 VACUUM
似乎没有任何改变这些临时表所需的空间量。为什么 RedShift 不更积极地压缩这些表?我可以在 RedShift 中配置它吗?还是我应该简单地将所有内容都放在一个大的临时表中?
我正在使用此查询来确定磁盘空间:
select name
, col
, sum(num_values) as num_values
, count(blocknum) as size_in_mb
from svv_diskusage
group by name
, col
【问题讨论】:
-
我想我在这里意识到了我的错误:因为一列的最小块大小是 1MB,所以我的表的最小大小必须是 1MB *(列数)。我可以通过为 DISTKEY 选择一个恒定值来减小大小,但这并不是大幅度减小。
-
是的,这就是原因。即使只有一条记录进入该节点,一列也将占用 1 MB。 (所以,如果你有很多节点,你的表大小会膨胀,直到你达到一个阈值,即填满 1 MB 块)。
标签: amazon-redshift