Encodage par dictionnaire d’octets - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Encodage par dictionnaire d’octets

Avec l’encodage par dictionnaire d’octets, un dictionnaire distinct de valeurs uniques est créé pour chaque bloc de valeurs de colonne sur le disque. (Un bloc de disque Amazon Redshift occupe 1 Mo.) Le dictionnaire contient jusqu’à 256 valeurs d’un octet qui sont stockées sous forme d’index pour les valeurs de données originales. Si plus de 256 valeurs sont stockées dans un seul bloc, les valeurs supplémentaires sont écrites dans le bloc dans un format brut, non compressé. Le processus se répète pour chaque bloc de disque.

Ce codage est très efficace pour les colonnes de chaînes à faible cardinalité. Cet encodage est optimal lorsque le domaine de données d’une colonne est inférieur à 256 valeurs uniques.

Pour les colonnes avec le type de données chaîne (CHAR et VARCHAR) codées avec BYTEDICT, Amazon Redshift effectue des analyses vectorisées et des évaluations de prédicats qui opèrent directement sur les données compressées. Ces analyses utilisent des instructions SIMD (Single Instruction and Multiple Data) spécifiques au matériel pour le traitement parallèle. Cela permet d’accélérer considérablement l’analyse des colonnes de chaînes de caractères. L’encodage par dictionnaire d’octets est particulièrement efficace en termes d’espace si une colonne CHAR/VARCHAR contient de longues chaînes de caractères.

Supposons qu’une table comporte une colonne COUNTRY dont le type de données est CHAR(30). A mesure que les données sont chargées, Amazon Redshift crée le dictionnaire et remplit la colonne COUNTRY avec la valeur de l’index. Le dictionnaire contient les valeurs uniques indexées, et la table elle-même contient uniquement les sous-scripts d’un octet des valeurs correspondantes.

Note

Les espaces de fin sont stockés pour les colonnes de caractères de longueur fixe. Par conséquent, dans une colonne CHAR(30), chaque valeur compressée enregistre 29 octets de stockage lorsque vous utilisez l’encodage par dictionnaire d’octets.

Le tableau suivant illustre le dictionnaire de la colonne COUNTRY.

Valeur de données unique Index du dictionnaire Taille (longueur fixe, 30 octets par valeur)
England 0 30
United States of America 1 30
Venezuela 2 30
Sri Lanka 3 30
Argentina 4 30
Japan 5 30
Total 180

Le tableau suivant représente les valeurs de la colonne COUNTRY.

Valeur de données d’origine Taille d’origine (longueur fixe, 30 octets par valeur) Valeur compressée (index) Nouvelle taille (octets)
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
Total 300 10

Dans cet exemple, la taille compressée totale est calculée comme suit : 6 entrées distinctes sont stockées dans le dictionnaire (6 * 30 = 180), et la table contient 10 valeurs compressées de 1 octet, soit un total de 190 octets.