【问题标题】:why AWS file size is different between Redshift and S3?为什么 Redshift 和 S3 之间的 AWS 文件大小不同?
【发布时间】:2020-02-06 20:05:48
【问题描述】:

我正在将表从 Redshift 卸载到 S3 以进行备份。因此,如果我们再次需要它们,我正在检查以确保文件是完整的。

我刚刚在一个大小为 1,056 的表上执行了 UNLOAD,根据:

select "table", size, tbl_rows
FROM svv_table_info;

根据文档,大小为“以 1 MB 数据块为单位”,因此此表使用 1,056 MB。但复制到 S3 后,文件大小为 154 MB(在 AWS 控制台中查看)。

我复制回 Redshift 并且所有行都在那里,所以这与“1 MB 数据块”有关。这与它在文件系统中的保存方式有关,是吗?

谁能解释一下?谢谢你。

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-redshift filesize


    【解决方案1】:

    所以您问为什么SVV_TABLE_INFO 视图声称该表占用了 1 GB,但是当您将其转储到磁盘时结果只有 154 MB?

    有两个主要原因。首先是您正在积极更新表,但没有清理它。当一行被更新或删除时,Redshift 实际上会追加一个新行(是的,存储为列)并删除旧行。要回收这个空间,你必须regularly vacuum the table。虽然 Redshift 会在后台进行一些吸尘,但这可能还不够,或者在您查看时可能还没有发生。

    第二个原因是存储表数据需要开销。表中的每一列都存储为 1 MB 块的列表,每个切片一个块(每个节点多个切片)。根据集群的大小和列数据类型,这可能会导致大量空间浪费。

    例如,如果您要存储 32 位整数,则一个 1MB 的块可以存储 256,000 个这样的整数,总共需要 4 个块来存储 1,000,000 个值(这可能接近您表中的行数)。 但是, 如果您有一个 4 节点集群,每个节点有 2 个切片(即 dc2.large),那么您实际上需要 8 个块,因为该列将在所有切片上进行分区.

    您可以在STV_BLOCKLIST 中查看每列使用的块数。

    【讨论】:

    • 太棒了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多