本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Byte-Dictionary 編碼
在 byte dictionary 編碼中,唯一值的個別字典是針對磁碟上資料欄值的每個區塊而建立的。(Amazon Redshift 磁碟會佔用 1 MB。) 字典最多可包含 256 個一元位元組值,其會以索引形式儲存至原始資料值。如果在單一區塊中儲存超過 256 個值,則額外的值會以原始、未壓縮格式寫入至區塊。對於每個磁碟區塊都會重複此程序。
這種編碼對低基數字串資料欄非常有效。當資料欄的資料網域少於 256 個唯一值時,這是最佳的編碼。
對於字串資料類型 (CHAR 和 VARCHAR) 使用 BYTEDICT 編碼的資料欄,Amazon Redshift 會執行向量化掃描和述詞評估,直接對壓縮資料進行操作。這些掃描會使用硬體專屬的單一指示和多重資料 (SIMD) 指示進行平行處理。這會顯著加快字串資料欄的掃描速度。如果 CHAR/VARCHAR 資料欄保存長字元字串,則 Byte-dictionary 編碼特別節省空間。
假設資料表具有資料類型為 CHAR(30) 的 COUNTRY 資料欄。載入資料時,Amazon Redshift 會建立字典。並在 COUNTRY 資料欄填入索引值。字典包含已建立索引的唯一值,而且資料表本身只包含對應值的一位元組下標。
注意
會儲存固定長度字元欄的多餘空格。因此,在 CHAR(30) 資料欄中,當您使用 byte-dictionary 編碼時,每個對應值都會節省 29 個位元組的儲存空間。
下表代表 COUNTRY 資料欄的字典。
唯一資料值 | 字典索引 | 大小 (固定長度,每個值 30 個位元組) |
---|---|---|
England | 0 | 30 |
United States of America | 1 | 30 |
Venezuela | 2 | 30 |
Sri Lanka | 3 | 30 |
Argentina | 4 | 30 |
Japan | 5 | 30 |
合計 | 180 |
下表代表 COUNTRY 資料欄中的值。
原始資料值 | 原始大小 (固定長度,每個值 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 個位元組。