Todos os produtos
Search
Central de documentação

Hologres:Dictionary encoding

Última atualização: Jun 28, 2026

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.

Dictionary encoding diagram

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

on

Ativa a codificação por dicionário para a coluna

off

Desativa a codificação por dicionário para a coluna

auto

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 auto como 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 TABLE e set_table_property aplicam alterações a todas as colunas. Para atualizar uma única coluna sem afetar as outras, use update_table_property .

Próximos passos