Redshift table 所有列都使用相同的磁盘 space

Redshift table with all columns consuming same disk space

我在 RedShift 中创建了一些小型暂存 table 作为 ETL 过程的一部分。每个 table 有 50-100 行(平均)和 ~100 列。当我查询每个分段 table 需要多少磁盘 space 时,所有列都占用了完全相同数量的 space。 space 的服用量远远超过了需要的量。例如,59 个 BOOLEAN 值需要 6 MB。我尝试了多种排列:

这些暂存 table 所需的 space 数量似乎没有任何变化。为什么 RedShift 不更积极地压缩这些 table?我可以在 RedShift 中配置它吗?或者我应该简单地强制所有内容都在一个大型舞台上 table?

我正在使用此查询来确定磁盘 space:

select name
    , col
    , sum(num_values) as num_values
    , count(blocknum) as size_in_mb
from svv_diskusage
group by name
    , col

由于 RedShift 中的块大小为 1MB,因此所有列每列至少占用 1MB。最重要的是,如果 DISTSTYLE 为 EVEN,它将更接近于数据库中每个切片一个块。由于无法在 RedShift 中调整块大小,因此无法减小以下空 table 的大小(列数)*(包含每列数据的切片)* 1MB。

基本上,

对于使用 KEY 或 EVEN 分配方式创建的 tables:

Minimum table size = block_size (1 MB) * (number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments

对于使用 ALL 分发方式创建的 table:

Minimum table size = block_size (1 MB) * (number_of_user_columns + 3 system columns) * number_of_cluster_nodes * number_of_table_segments

number_of_table_segments 对于未排序的 table 是 1,对于使用排序键定义的 table 是 2