本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Byte-Dictionary 編碼
在 byte dictionary 編碼中,唯一值的個別字典是針對磁碟上資料欄值的每個區塊而建立的。(一個 Amazon Redshift 磁碟區塊佔用 1 MB。) 字典最多可包含 256 個一元位元組值,其會以索引形式存放至原始資料值。如果在單一區塊中存放超過 256 個值,則額外的值會以原始、未壓縮格式寫入至區塊。對於每個磁碟區塊都會重複此程序。
當資料欄包含有限數目的唯一值時,此編碼很有效。當資料欄的資料網域少於 256 個唯一值時,這是最佳的編碼。如果 CHAR 資料欄保存長字元字串,則 Byte-dictionary 編碼特別節省空間。
與 VARCHAR 資料欄搭配使用時,Byte-dictionary 編碼不一定有效率。使用 BYTEDICT 與大型 VARCHAR 資料欄搭配可能產生多餘的磁碟用量。強烈建議使用對 VARCHAR 資料欄不同編碼,例如 LZO。
假設資料表具有 CHAR (30) 資料類型的 COUNTE 資料欄。載入資料時,Amazon Redshift 會建立字典並在 COUNTRY 資料欄填入索引值。字典包含已建立索引的唯一值,而且資料表本身只包含對應值的一位元組下標。
會存放固定長度字元欄的多餘空格。因此,在 CHAR(30) 資料欄中,當您使用 byte-dictionary 編碼時,每個對應值都會節省 29 個位元組的儲存空間。
下表代表 COUNTY 資料欄的字典。
唯一資料值 | 字典索引 | 大小 (固定長度,每個值 30 個位元組) |
---|---|---|
England | 0 | 30 |
United States of America | 1 | 30 |
Venezuela | 2 | 30 |
Sri Lanka | 3 | 30 |
Argentina | 4 | 30 |
Japan | 5 | 30 |
合計 | 180 |
下表代表 COUNTY 資料欄中的值。
原始資料值 | 原始大小 (固定長度,每個值 30 個位元組) | 壓縮值 (索引) | 新大小 (位元組) |
---|---|---|---|
England | 30 | 0 | 1 |
England | 30 | 0 | 1 |
United States of America | 30 | 1 | 1 |
United States of America | 30 | 1 | 1 |
Venezuela | 30 | 2 | 1 |
Sri Lanka | 30 | 3 | 1 |
Argentina | 30 | 4 | 1 |
Japan | 30 | 5 | 1 |
Sri Lanka | 30 | 3 | 1 |
Argentina | 30 | 4 | 1 |
合計 | 300 | 10 |
此範例中的合計壓縮大小計算如下:6 個不同項目存放在字典 (6 * 30 = 180),而且資料表包含 10 個 1 位元組壓縮值,合計 190 個位元組。