跳至內容

如何在 Amazon Redshift 中設計欄編碼?

2 分的閱讀內容
0

我想在 Amazon Redshift 中設計欄編碼。

簡短描述

若要在 Amazon Redshift 中設定欄編碼,請使用 ENCODE AUTOANALYZE COMPRESSION 命令。如需詳細資訊,請參閱壓縮編碼

如果對排序索引鍵欄套用壓縮,則查詢效能可能會下降,因為它會為某些查詢類型新增區塊掃描。如果您手動為資料表指定編碼類型,請為排序索引鍵欄設定 RAW 編碼。

如需詳細資訊,請參閱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 中偵測與釋放鎖定?

欄壓縮可減少儲存資料的大小

AWS 官方已更新 1 年前