Byte-Dictionary 編碼 - Amazon Redshift

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

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