使用列压缩 - Amazon Redshift

使用列压缩

压缩是可缩减数据存储大小的列级操作。压缩能够节约存储空间并减少从存储读取的数据大小,这种方法可以减少磁盘 I/O 量,因此可提高查询性能。

ENCODE AUTO 是表的默认设置。Amazon Redshift 会自动管理表中所有列的压缩编码。如果为表中的任何列指定压缩编码,则表不再设置为 ENCODE AUTO。Amazon Redshift 不再自动管理表中所有列的压缩编码。您可以为表指定 ENCODE AUTO 选项,以使 Amazon Redshift 能够自动管理表中所有列的压缩编码。有关更多信息,请参阅CREATE TABLEALTER TABLE

当您创建表时,您可以将压缩类型或编码手动应用到表中的列。或者,您可以使用 COPY 命令来自动分析和应用压缩。有关更多信息,请参阅让 COPY 选择压缩编码。有关应用自动压缩的详细信息,请参阅使用自动压缩加载表

注意

我们强烈建议使用 COPY 命令应用自动压缩。

如果新表具有与另一个表相同的数据特征,则可以选择手动应用压缩编码。或者,如果您在测试时发现在自动压缩期间应用的压缩编码不太适合您的数据,您可以这样操作。如果您选择手动应用压缩编码,则可以对已填充的表运行 ANALYZE COMPRESSION 命令并根据其结果选择压缩编码。

要手动应用压缩,您可以在 CREATE TABLE 语句中为各个列指定压缩编码。语法如下所示。

CREATE TABLE table_name (column_name data_type ENCODE encoding-type)[, ...]

其中,encoding-type 取自下一部分中的关键字表。

例如,下面的语句会创建一个包含两列的表 PRODUCT。将数据加载到表中后,PRODUCT_ID 列未压缩,但 PRODUCT_NAME 列使用字节词典编码 (BYTEDICT) 压缩。

create table product( product_id int encode raw, product_name char(20) encode bytedict);

您可以使用 ALTER TABLE 命令在向表中添加列时指定其编码。

ALTER TABLE table-name ADD [ COLUMN ] column_name column_type ENCODE encoding-type