Pular para o conteúdo principal

Tipos de layout de dicionário

Há várias formas de armazenar dicionários em memória, cada uma com diferentes compensações entre uso de CPU e de RAM.
LayoutDescrição
flatArmazena dados em arrays simples indexados por chave. É o layout mais rápido, mas as chaves devem ser UInt64 e estar dentro do limite de max_array_size.
hashedArmazena dados em uma tabela hash. Não há limite para o tamanho da chave, e ele suporta qualquer número de elementos.
sparse_hashedComo hashed, mas reduz o uso de memória à custa de CPU.
complex_key_hashedComo hashed, para chaves compostas.
complex_key_sparse_hashedComo sparse_hashed, para chaves compostas.
hashed_arrayAtributos armazenados em arrays com uma tabela hash que mapeia chaves para índices do array. Eficiente em termos de memória para muitos atributos.
complex_key_hashed_arrayComo hashed_array, para chaves compostas.
range_hashedTabela hash com intervalos ordenados. Suporta buscas por chave + intervalo de data/hora.
complex_key_range_hashedComo range_hashed, para chaves compostas.
cacheCache em memória de tamanho fixo. Apenas as chaves acessadas com frequência são armazenadas.
complex_key_cacheComo cache, para chaves compostas.
ssd_cacheComo cache, mas armazena dados em SSD com um índice em memória.
complex_key_ssd_cacheComo ssd_cache, para chaves compostas.
directSem armazenamento em memória — consulta a origem diretamente a cada solicitação.
complex_key_directComo direct, para chaves compostas.
ip_trieEstrutura trie para buscas rápidas de prefixos de IP (baseadas em CIDR).
Layouts recomendadosflat, hashed e complex_key_hashed oferecem o melhor desempenho de consultas. Layouts com cache não são recomendados devido ao desempenho potencialmente ruim e à dificuldade de ajustar os parâmetros — veja cache para mais detalhes.

Especifique o layout de dicionário

Se você estiver usando um dicionário com o ClickHouse Cloud, use a opção de consulta DDL para criar seus dicionários e crie o dicionário como o usuário default. Além disso, verifique a lista de fontes de dicionário compatíveis no guia de compatibilidade com a Cloud.
Você pode configurar um layout de dicionário com a cláusula LAYOUT (para DDL) ou com a configuração layout em definições de arquivo de configuração.
CREATE DICTIONARY (...)
...
LAYOUT(LAYOUT_TYPE(param value)) -- configurações de layout
...

Consulte também CREATE DICTIONARY para ver a sintaxe DDL completa. Dicionários cujo layout não contém a palavra complex-key* têm uma chave do tipo UInt64; dicionários complex-key* têm uma chave composta (complexa, com tipos arbitrários). Exemplo de chave numérica (a coluna key_column é do tipo UInt64):
CREATE DICTIONARY dict_name (
    key_column UInt64,
    ...
)
PRIMARY KEY key_column

Exemplo de chave composta (a chave tem um elemento do tipo String):
CREATE DICTIONARY dict_name (
    country_code String,
    ...
)
PRIMARY KEY country_code

Melhore o desempenho do dicionário

Há várias formas de melhorar o desempenho do dicionário:
  • Chame a função usada para trabalhar com o dicionário após o GROUP BY.
  • Marque como injetivos os atributos a serem extraídos. Um atributo é considerado injetivo se chaves diferentes corresponderem a valores de atributo diferentes. Portanto, quando o GROUP BY usa uma função que busca um valor de atributo pela chave, essa função é automaticamente removida do GROUP BY.
O ClickHouse retorna uma exceção em caso de erros relacionados a dicionários. Exemplos de erros podem ser:
  • Não foi possível carregar o dicionário acessado.
  • Erro ao consultar um dicionário cached.
Você pode consultar a lista de dicionários e seus status na tabela system.dictionaries.
Última modificação em 10 de junho de 2026