使用列压缩 - Amazon Redshift

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用列压缩

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

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

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

注意

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

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

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

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

在这里,ENCODE length取自下一部分中的关键字表。

例如,下面的语句会创建一个包含两列的表 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