Byte-Verzeichnis-Kodierung - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Byte-Verzeichnis-Kodierung

Bei einer Byte-Verzeichnis-Kodierung wird für jeden Block von Spaltenwerten auf dem Datenträger ein getrenntes Verzeichnis eindeutiger Werte erstellt. (Ein Amazon-Redshift-Datenträgerblock belegt 1 MB.) Das Verzeichnis enthält bis zu 256 Einzelbyte-Werten, die als Indizes für die ursprünglichen Datenwerte gespeichert werden. Wenn in einem einzelnen Block mehr als 256 Werte gespeichert werden, werden die zusätzlichen Werte in roher, nicht komprimierter Form in den Block geschrieben. Dieser Vorgang wird für jeden Datenträgerblock wiederholt.

Diese Kodierung ist bei Zeichenfolgenspalten mit niedriger Kardinalität sehr effektiv. Diese Kodierung ist optimal, wenn die Datendomäne einer Spalte weniger als 256 eindeutige Werte enthält.

Für Spalten mit dem Zeichenfolgendatentyp (CHAR und VARCHAR), die mit BYTEDICT codiert sind, führt Amazon Redshift vektorisierte Scans und Prädikatauswertungen durch, die direkt über komprimierte Daten arbeiten. Diese Scans verwenden hardwarespezifische Anweisungen des Typs Single Instruction and Multiple Data (SIMD) für die parallele Verarbeitung. Dadurch wird das Scannen von Zeichenfolgenspalten erheblich beschleunigt. Die Byte-Verzeichnis-Kodierung ist besonders platzeffizient, wenn eine CHAR/VARCHAR-Spalte lange Zeichenfolgen enthält.

Angenommen eine Tabelle besitzt eine Spalte COUNTRY mit einem Datentyp CHAR(30). Während die Daten geladen werden, erstellt Amazon Redshift das Verzeichnis und füllt die Spalte COUNTRY mit dem Indexwert aus. Das Verzeichnis enthält die indizierten eindeutigen Werte. Die Tabelle selbst enthält nur die Einzelbyte-Subskripts der entsprechenden Werte.

Anmerkung

Leerzeichen am Ende werden im Fall von Zeichenspalten mit fester Länge gespeichert. Daher spart in einer CHAR(30)-Spalte jeder komprimierte Wert 29 Bytes an Speicher, wenn Sie die Byte-Verzeichnis-Kodierung verwenden.

Die folgende Tabelle stellt das Verzeichnis für die Spalte COUNTRY dar.

Eindeutiger Datenwert Verzeichnisindex Größe (feste Länge, 30 Bytes pro Wert)
England 0 30
United States of America 1 30
Venezuela 2 30
Sri Lanka 3 30
Argentina 4 30
Japan 5 30
Gesamtsumme 180

Die folgende Tabelle stellt die Werte in der Spalte COUNTRY dar.

Ursprünglicher Datenwert Ursprüngliche Größe (feste Länge, 30 Bytes pro Wert) Komprimierter Wert (Index) Neue Größe (Bytes)
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
Gesamtsumme 300 10

Die gesamte komprimierte Größe in diesem Beispiel wird wie folgt berechnet: Im Verzeichnis sind 6 verschiedene Einträge gespeichert (6 * 30 = 180) und die Tabelle enthält 10 komprimierte Werte mit 1 Byte. Dies sind insgesamt 190 Bytes.