Tous les produits
Search
Centre de documentation

Hologres:Dictionary encoding

Dernière mise à jour :Aug 11, 2026

L'encodage par dictionnaire compresse les colonnes à faible cardinalité en remplaçant les chaînes répétitives par des codes numériques compacts. Cette technique réduit l'espace de stockage et accélère les requêtes GROUP BY et FILTER.

Fonctionnement

Hologres encode les données brutes des colonnes sous forme de valeurs NUMERIC et conserve le schéma d'encodage correspondant. La lecture décode les données à la volée à l'aide de ce schéma.

Cette approche s'avère particulièrement efficace pour les colonnes TEXT dont les valeurs se répètent fréquemment, comme les champs de statut, les libellés de catégorie ou les codes régionaux. Lorsque le taux de récurrence d'une colonne atteint 90 % ou plus, l'encodage réduit significativement le stockage et accélère les comparaisons de chaînes, moyennant une légère surcharge liée au décodage.

Pour les colonnes présentant un faible taux de récurrence (environ la moitié des valeurs sont uniques) ou celles utilisées dans des opérations de jointure, la surcharge liée à l'encodage et au décodage l'emporte sur les bénéfices. Évitez d'activer l'encodage par dictionnaire pour ces colonnes.

Lorsque la valeur auto est définie et que le taux de récurrence d'une colonne reste inférieur à 90 %, Hologres n'active pas l'encodage : la colonne est stockée sans mappage de dictionnaire.

Dictionary encoding diagram

Configuration de l'encodage par dictionnaire

L'encodage par dictionnaire s'applique au niveau de chaque colonne via la propriété de table dictionary_encoding_columns . Deux formes de syntaxe sont disponibles selon votre version de Hologres.

Hologres V2.1 et versions ultérieures — clause WITH

CREATE TABLE <table_name> (...) WITH (dictionary_encoding_columns = '[<columnName>{:[on|off|auto]}[,...]]');

Toutes les versions de Hologres — instruction CALL

CREATE TABLE <table_name> (...);
CALL set_table_property('table_name', 'dictionary_encoding_columns', '[<columnName>{:[on|off|auto]}[,...]]');

La propriété dictionary_encoding_columns accepte une liste de noms de colonnes séparés par des virgules, chacun pouvant être associé à une valeur optionnelle :

Valeur Comportement
on Active l'encodage par dictionnaire pour la colonne
off Désactive l'encodage par dictionnaire pour la colonne
auto Hologres évalue le taux de récurrence de la colonne lors de l'écriture. Si le taux atteint 90 % ou plus, l'encodage est activé ; sinon, la colonne est stockée sans encodage

Comportement par défaut selon la version :

  • Hologres V0.8 et versions antérieures : l'encodage par dictionnaire est activé pour toutes les colonnes TEXT.

  • Hologres V0.9 et versions ultérieures : toutes les colonnes TEXT utilisent la valeur auto par défaut. L'encodage n'est activé que lorsque le taux de récurrence atteint 90 % ou plus.

Pour modifier les mappages de dictionnaire après la création d'une table, utilisez l'instruction ALTER TABLE ou update_table_property . Les modifications prennent effet de manière asynchrone : les mappages sont construits ou supprimés en arrière-plan.

Types de stockage pris en charge

L'encodage par dictionnaire est uniquement pris en charge pour les tables utilisant le stockage columnaire ou le stockage hybride ligne-colonne. Les colonnes spécifiées par dictionary_encoding_columns peuvent contenir des valeurs nulles.

Bonnes pratiques

**Utilisez auto comme valeur par défaut.** Cela évite à la fois la pénalité de stockage liée aux opportunités d'encodage manquées et la surcharge de décodage liée à un encodage inutile. La désactivation totale de l'encodage par dictionnaire augmente la consommation de stockage.

Ciblez les colonnes TEXT à forte récurrence. L'encodage par dictionnaire offre le meilleur rendement pour les colonnes telles que les codes de statut, les libellés de catégorie et les identifiants régionaux, c'est-à-dire les champs comportant un petit nombre de valeurs distinctes qui se répètent sur de nombreuses lignes.

Évitez d'encoder les données JSON stockées au format TEXT. Les valeurs JSON sont rarement répétées à l'identique ; l'encodage ajoute donc une surcharge sans réduire l'espace de stockage.

N'encodez pas toutes les colonnes. L'application de l'encodage par dictionnaire à toutes les colonnes, y compris celles à haute cardinalité ou utilisées pour les jointures, génère une surcharge d'encodage et de décodage inutile qui peut ralentir les requêtes au lieu de les accélérer.

Exemples

Hologres V2.1 et versions ultérieures :

CREATE TABLE tbl (
    a int NOT NULL,
    b text NOT NULL,
    c text NOT NULL
)
WITH (
    dictionary_encoding_columns = 'a:on,b:off,c:auto'
);

-- Modify dictionary mappings for all columns.
ALTER TABLE tbl SET (dictionary_encoding_columns = 'a:off');

Toutes les versions de Hologres :

-- Create a table and set dictionary mappings.
BEGIN;
CREATE TABLE tbl (
    a int NOT NULL,
    b text NOT NULL,
    c text NOT NULL
);
CALL set_table_property('tbl', 'dictionary_encoding_columns', 'a:on,b:off,c:auto');
COMMIT;

-- Modify dictionary mappings for all columns.
-- Columns b and c are TEXT columns, so they retain dictionary mappings by default.
CALL set_table_property('tbl', 'dictionary_encoding_columns', 'a:off');

-- Modify dictionary mappings for a single column only.
CALL update_table_property('tbl', 'dictionary_encoding_columns', 'c:off');
Les instructions ALTER TABLE et set_table_property appliquent les modifications à toutes les colonnes. Pour mettre à jour une seule colonne sans affecter les autres, utilisez update_table_property .

Étapes suivantes