Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Layouts de dictionnaires

Types de layout de dictionnaire

Il existe plusieurs façons de stocker les dictionnaires en mémoire, chacune avec ses propres compromis en termes d’utilisation du CPU et de la RAM.

Layout Description
flat Stocke les données dans des tableaux simples indexés par clé. C’est le layout le plus rapide, mais les clés doivent être de type UInt64 et rester inférieures à max_array_size.
hashed Stocke les données dans une table de hachage. Aucune limite sur la taille des clés, et prend en charge n’importe quel nombre d’éléments.
sparse_hashed Comme hashed, mais avec un compromis en faveur d’une utilisation mémoire plus faible au prix du CPU.
complex_key_hashed Comme hashed, pour les clés composites.
complex_key_sparse_hashed Comme sparse_hashed, pour les clés composites.
hashed_array Attributs stockés dans des tableaux, avec une table de hachage qui associe les clés aux indices des tableaux. Économe en mémoire lorsqu’il y a de nombreux attributs.
complex_key_hashed_array Comme hashed_array, pour les clés composites.
range_hashed Table de hachage avec plages ordonnées. Prend en charge les recherches par clé + plage de dates/heures.
complex_key_range_hashed Comme range_hashed, pour les clés composites.
cache Cache en mémoire de taille fixe. Seules les clés fréquemment consultées sont stockées.
complex_key_cache Comme cache, pour les clés composites.
ssd_cache Comme cache, mais stocke les données sur SSD avec un index en mémoire.
complex_key_ssd_cache Comme ssd_cache, pour les clés composites.
direct Aucun stockage en mémoire — interroge directement la source pour chaque requête.
complex_key_direct Comme direct, pour les clés composites.
ip_trie Structure en trie pour des recherches rapides de préfixes IP (basées sur CIDR).
hierarchical Prise en charge des hiérarchies avec une clé numérique décrivant les relations parent-enfant.
polygon Recherches point-dans-polygone efficaces (géocodage inversé).
regexp_tree Fait correspondre les clés à un arbre d’expressions régulières.

Spécifier le layout du dictionnaire

Vous pouvez configurer le layout d'un dictionnaire avec la clause LAYOUT (pour le DDL) ou le paramètre layout dans les définitions du fichier de configuration.

CREATE DICTIONARY (...)
...
LAYOUT(LAYOUT_TYPE(param value)) -- paramètres de layout
...

Voir aussi CREATE DICTIONARY pour la syntaxe DDL complète.

Les dictionnaires dont le layout ne contient pas complex-key* ont une clé de type UInt64 ; les dictionnaires complex-key* ont une clé composite (complexe, avec des types arbitraires).

Exemple de clé numérique (la colonne key_column est de type UInt64) :

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

Exemple de clé composite (la clé comporte un élément de type String) :

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

Améliorer les performances des dictionnaires

Il existe plusieurs façons d'améliorer les performances des dictionnaires :

  • Appeler la fonction de manipulation du dictionnaire après GROUP BY.
  • Marquer comme injectifs les attributs à extraire. Un attribut est dit injectif si des clés différentes correspondent à des valeurs d'attribut différentes. Ainsi, lorsque GROUP BY utilise une fonction qui récupère une valeur d'attribut à partir de la clé, cette fonction est automatiquement retirée de GROUP BY.

ClickHouse génère une exception en cas d'erreur liée aux dictionnaires. Voici quelques exemples d'erreurs :

  • Le dictionnaire auquel l'accès est demandé n'a pas pu être chargé.
  • Erreur lors d'une requête sur un dictionnaire cached.

Vous pouvez afficher la liste des dictionnaires et leur statut dans la table system.dictionaries.

Navigation