Byte-Dictionary 編碼 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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 個位元組。