跳至内容

如何在 Amazon Redshift 中设计列编码?

2 分钟阅读
0

我想在 Amazon Redshift 中设计列编码。

简短描述

要在 Amazon Redshift 中配置列编码,请使用 ENCODE AUTOANALYZE COMPRESSION 命令。有关详细信息,请参阅压缩编码

如果您对排序键列应用压缩,则查询性能可能会降低,因为它会为某些查询类型添加块扫描。如果您手动为表指定编码类型,请为排序键列设置 RAW 编码。

有关详细信息,请参阅 Amazon Redshift best practices for designing tables(Amazon Redshift 设计表的最佳实践)

解决方法

使用 ENCODE AUTO 最大限度地压缩列

使用 ENCODE AUTO 自动优化 Amazon Redshift 表中的列压缩。默认情况下,ENCODE AUTO 会持续分析集群的工作负载模式,以帮助最大限度地提高查询性能并减少对手动压缩管理的需求。

如果您在表中的任何列上指定编码类型,请关闭 ENCODE AUTO

要检查是否为表开启了 ENCODE AUTO,请使用以下查询:

SELECT "table", encoded FROM svv_table_info WHERE "table" = 'table_name';

**注意:**请将 table_name 替换为您的表名称。

运行 ANALYZE COMPRESSION 命令来查看对表的分析

要执行压缩分析并生成建议表压缩编码的报告,请运行 ANALYZE COMPRESSION 命令:

ANALYZE COMPRESSION lineitem;

**注意:**将 lineitem 替换为您的表名。

输出示例:

Table   |     Column      | Encoding | Est_reduction_pct
----------+-----------------+----------+-------------------
 lineitem | l_orderkey      | raw      | 0.00
 lineitem | l_partkey       | az64     | 33.34
 lineitem | l_suppkey       | az64     | 45.46
 lineitem | l_linenumber    | az64     | 87.88
 lineitem | l_quantity      | az64     | 80.00
 lineitem | l_extendedprice | az64     | 60.32
 lineitem | l_discount      | az64     | 90.77
 lineitem | l_tax           | az64     | 90.77
 lineitem | l_returnflag    | zstd     | 80.99
 lineitem | l_linestatus    | zstd     | 86.86
 lineitem | l_shipdate      | az64     | 61.15
 lineitem | l_commitdate    | az64     | 61.26
 lineitem | l_receiptdate   | az64     | 61.15
 lineitem | l_shipinstruct  | zstd     | 96.50
 lineitem | l_shipmode      | bytedict | 88.89
 lineitem | l_comment       | zstd     | 70.36
 lineitem | l_dummy         | zstd     | 99.97
(17 rows)

**注意:**对于每列,该报告都包含与 RAW 编码相比可能减少的磁盘空间的估计值。

(可选)为了帮助您理解 ANALYZE COMPRESSION 命令的输出,您可以查看您的表定义。运行以下命令:

SHOW TABLE lineitem;

**注意:**将 lineitem 替换为您的表名。

输出示例:

Show Table DDL statement             
-------------------------------------------------
 CREATE TABLE public.lineitem (                 
     l_orderkey integer ENCODE raw,             
     l_partkey integer ENCODE raw,              
     l_suppkey integer ENCODE raw,              
     l_linenumber integer ENCODE raw,           
     l_quantity numeric(15,2) ENCODE raw,       
     l_extendedprice numeric(15,2) ENCODE raw,  
     l_discount numeric(15,2) ENCODE raw,       
     l_tax numeric(15,2) ENCODE raw,            
     l_returnflag character(1) ENCODE raw,      
     l_linestatus character(1) ENCODE raw,      
     l_shipdate date ENCODE raw,                
     l_commitdate date ENCODE raw,              
     l_receiptdate date ENCODE raw,             
     l_shipinstruct character(25) ENCODE raw,   
     l_shipmode character(10) ENCODE raw,       
     l_comment character varying(44) ENCODE raw,
     l_dummy character varying(10) ENCODE raw   
 )                                              
 DISTSTYLE AUTO                                 
 SORTKEY ( l_orderkey );
(1 row)

ANALYZE COMPRESSION 作为咨询工具,不会修改表的列编码。要应用建议的编码,请重新创建表或运行 ALTER TABLE 命令:

ALTER TABLE lineitem ALTER COLUMN l_dummy ENCODE example_compression;

**注意:**将 lineitem 替换为您的表名,将 l_dummy 替换为您的列名,将 example_compression 替换为您的压缩编码。

相关信息

如何在 Amazon Redshift 中检测和释放锁定?

Column compression to reduce the size of stored data(压缩列以减小存储数据的大小)

AWS 官方已更新 1 年前