Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Layouts de diccionario

Tipos de layout del diccionario

Hay varias formas de almacenar diccionarios en memoria, cada una con sus propias compensaciones entre el uso de CPU y RAM.

Layout Descripción
flat Almacena los datos en arrays planos indexados por clave. Es el layout más rápido, pero las claves deben ser UInt64 y estar limitadas por max_array_size.
hashed Almacena los datos en una tabla hash. No hay límite en el tamaño de las claves y admite cualquier número de elementos.
sparse_hashed Como hashed, pero reduce el uso de memoria a cambio de más CPU.
complex_key_hashed Como hashed, para claves compuestas.
complex_key_sparse_hashed Como sparse_hashed, para claves compuestas.
hashed_array Atributos almacenados en arrays con una tabla hash que asigna las claves a índices del array. Eficiente en memoria cuando hay muchos atributos.
complex_key_hashed_array Como hashed_array, para claves compuestas.
range_hashed Tabla hash con rangos ordenados. Admite búsquedas por clave + rango de fecha/hora.
complex_key_range_hashed Como range_hashed, para claves compuestas.
cache Caché en memoria de tamaño fijo. Solo se almacenan las claves a las que se accede con frecuencia.
complex_key_cache Como cache, para claves compuestas.
ssd_cache Como cache, pero almacena los datos en SSD con un índice en memoria.
complex_key_ssd_cache Como ssd_cache, para claves compuestas.
direct Sin almacenamiento en memoria: consulta el origen directamente para cada solicitud.
complex_key_direct Como direct, para claves compuestas.
ip_trie Estructura trie para búsquedas rápidas de prefijos IP (basadas en CIDR).
hierarchical Compatibilidad con jerarquías con una clave numérica que describe relaciones padre-hijo.
polygon Búsquedas eficientes de punto en polígono (geocodificación inversa).
regexp_tree Compara las claves con un árbol de expresiones regulares.

Especificar el layout del diccionario

Puede configurar el layout de un diccionario con la cláusula LAYOUT (para DDL) o con el ajuste layout en las definiciones del archivo de configuración.

CREATE DICTIONARY (...)
...
LAYOUT(LAYOUT_TYPE(param value)) -- configuración del layout
...

Véase también CREATE DICTIONARY para consultar la sintaxis DDL completa.

Los diccionarios cuyo layout no contiene la palabra complex-key* tienen una clave de tipo UInt64; los diccionarios complex-key* tienen una clave compuesta (compleja, con tipos arbitrarios).

Ejemplo de clave numérica (la columna key_column es de tipo UInt64):

CREATE DICTIONARY dict_name (
    key_column UInt64,
    ...
)
PRIMARY KEY key_column

Ejemplo de clave compuesta (la clave tiene un elemento de tipo String):

CREATE DICTIONARY dict_name (
    country_code String,
    ...
)
PRIMARY KEY country_code

Mejorar el rendimiento de los diccionarios

Hay varias formas de mejorar el rendimiento de los diccionarios:

  • Llame a la función para trabajar con el diccionario después de GROUP BY.
  • Marque como inyectivos los atributos que se van a extraer. Un atributo se considera inyectivo si a claves distintas les corresponden valores de atributo distintos. Por lo tanto, cuando GROUP BY usa una función que obtiene un valor de atributo a partir de la clave, esta función se saca automáticamente de GROUP BY.

ClickHouse genera una excepción cuando se producen errores en los diccionarios. Algunos ejemplos de errores son:

  • No se pudo cargar el diccionario al que se intenta acceder.
  • Error al consultar un diccionario cached.

Puede ver la lista de diccionarios y sus estados en la tabla system.dictionaries.

Navigation