Delta 編碼 - Amazon Redshift

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

Delta 編碼

Delta 編碼對日期時間欄很有用。

Delta 藉由記錄資料欄中彼此跟隨的值之間的差異來壓縮資料。此差異會記錄在磁碟上資料欄值之每個區塊的個別字典中。(Amazon Redshift 磁碟會佔用 1 MB。) 例如,假設資料欄包含 10 個整數,順序從 1 到 10。第一個會儲存為 4 位元組整數 (加上 1 位元組旗標)。接下來的九個會分別儲存為值為 1 的位元組,表示比前一個值多 1。

Delta 編碼附有兩個變異:

  • DELTA 會將差異記錄為 1 位元組值 (8 位元組整數)

  • DELTA32K 會將差異記錄為 2 位元組值 (16 位元組整數)

如果資料欄中的大多數值可以透過使用單一位元組進行壓縮,則 1 位元組的變化非常有效。但是,如果差異較大,則此編碼 (在最壞的情況下) 會比儲存未壓縮資料的效果差。類似邏輯適用於 16 位元版本。

如果兩個值之間的差異超過 1 位元組範圍 (DELTA) 或 2 位元組範圍 (DELTA32K),則會存放完整原始值,前面為 1 位元組旗標。1 位元組範圍從 -127 到 127,而 2 位元組範圍從 -32K 到 32K。

下表顯示數值欄的 Delta 編碼如何運作。

原始資料值 原始大小 (位元組) 差異 (delta) 壓縮值 壓縮大小 (位元組)
1 4 1 1+4 (旗標 + 實際值)
5 4 4 4 1
50 4 45 45 1
200 4 150 150 1+4 (旗標 + 實際值)
185 4 -15 -15 1
220 4 35 35 1
221 4 1 1 1
合計 28 15