A codificação por dicionário compacta colunas de baixa cardinalidade substituindo valores de string repetidos por códigos numéricos reduzidos. Essa técnica diminui o armazenamento e acelera consultas com GROUP BY e FILTER.
Como funciona
O Hologres codifica os dados brutos da coluna como valores NUMERIC e mantém um esquema de codificação correspondente. As leituras decodificam os dados em tempo real usando esse esquema.
Essa abordagem é mais eficaz para colunas TEXT cujos valores se repetem com frequência, como campos de status, rótulos de categoria ou códigos de região. Quando a taxa de recorrência de uma coluna atinge 90% ou mais, a codificação reduz significativamente o armazenamento e acelera comparações de strings, com uma pequena sobrecarga de decodificação.
Em colunas com baixa taxa de recorrência (aproximadamente metade dos valores são únicos) ou utilizadas em operações de join, a sobrecarga de codificação e decodificação supera os benefícios. Evite ativar a codificação por dicionário nessas colunas.
Quando auto está definido e a taxa de recorrência da coluna permanece abaixo de 90%, o Hologres não ativa a codificação e armazena a coluna sem mapeamento de dicionário.

Configurar a codificação por dicionário
A codificação por dicionário aplica-se por coluna por meio da propriedade de tabela dictionary_encoding_columns. Duas formas de sintaxe estão disponíveis, dependendo da versão do Hologres.
Hologres V2.1 e posterior — cláusula WITH
CREATE TABLE <table_name> (...) WITH (dictionary_encoding_columns = '[<columnName>{:[on|off|auto]}[,...]]');
Todas as versões do Hologres — instrução CALL
CREATE TABLE <table_name> (...);
CALL set_table_property('table_name', 'dictionary_encoding_columns', '[<columnName>{:[on|off|auto]}[,...]]');
A propriedade dictionary_encoding_columns aceita uma lista de nomes de colunas separados por vírgulas, cada um com um valor opcional:
|
Valor |
Comportamento |
|
|
Ativa a codificação por dicionário para a coluna |
|
|
Desativa a codificação por dicionário para a coluna |
|
|
O Hologres avalia a taxa de recorrência da coluna no momento da gravação. Se a taxa atingir 90% ou mais, a codificação será ativada; caso contrário, a coluna será armazenada sem codificação |
Comportamento padrão por versão:
Hologres V0.8 e anteriores: A codificação por dicionário está ativada para todas as colunas TEXT.
Hologres V0.9 e posteriores: Todas as colunas TEXT têm
autocomo padrão. A codificação é ativada apenas quando a taxa de recorrência atinge 90% ou mais.
Para modificar os mapeamentos de dicionário após a criação da tabela, use ALTER TABLE ou update_table_property. As alterações entram em vigor de forma assíncrona: os mapeamentos são criados ou excluídos em segundo plano.
Tipos de armazenamento compatíveis
A codificação por dicionário é compatível apenas com tabelas que usam column store ou armazenamento híbrido de linha-coluna. As colunas especificadas por dictionary_encoding_columns podem ser nulas.
Melhores práticas
**Use auto como padrão.** Isso evita tanto a penalidade de armazenamento por oportunidades perdidas de codificação quanto a sobrecarga de decodificação de codificações desnecessárias. Desativar completamente a codificação por dicionário aumenta o consumo de armazenamento.
Priorize colunas TEXT de alta recorrência. A codificação por dicionário oferece maior benefício para colunas como códigos de status, rótulos de categoria e identificadores de região, ou seja, campos com poucos valores distintos que se repetem em muitas linhas.
Evite codificar JSON armazenado como TEXT. Valores JSON raramente se repetem literalmente; portanto, a codificação adiciona sobrecarga sem reduzir o armazenamento.
Não codifique todas as colunas. Aplicar codificação por dicionário em todas as colunas, incluindo aquelas com alta cardinalidade ou colunas de join, gera sobrecarga desnecessária de codificação e decodificação que pode tornar as consultas mais lentas em vez de acelerá-las.
Exemplos
Hologres V2.1 e posterior:
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');
Todas as versões do 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');
ALTER TABLEeset_table_propertyaplicam alterações a todas as colunas. Para atualizar uma única coluna sem afetar as outras, useupdate_table_property.