Remarques
-
Tableaux : dans Elasticsearch, tous les champs prennent en charge les tableaux de manière native. Dans ClickHouse, les tableaux doivent être définis explicitement (par ex.
Array(String)), avec l’avantage de pouvoir accéder à des positions spécifiques et les interroger, par ex.an_array[1]. -
Champs multiples : Elasticsearch permet d’indexer un même champ de plusieurs façons (par ex. à la fois comme
textet commekeyword). Dans ClickHouse, ce schéma doit être modélisé à l’aide de colonnes ou de vues distinctes. -
Types Map et JSON - Dans ClickHouse, le type
Mapest couramment utilisé pour modéliser des structures dynamiques clé-valeur telles queresourceAttributesetlogAttributes. Ce type permet une ingestion flexible sans schéma en autorisant l’ajout de clés arbitraires à l’exécution — dans un esprit proche des objets JSON d’Elasticsearch. Il existe toutefois des limites importantes à prendre en compte :- Types de valeurs uniformes : les colonnes
Mapdans ClickHouse doivent avoir un type de valeur cohérent (par ex.Map(String, String)). Les valeurs de types mixtes ne sont pas prises en charge sans coercition. - Coût en performances : l’accès à n’importe quelle clé dans un
Mapnécessite de charger la map entière en mémoire, ce qui peut nuire aux performances. - Pas de sous-colonnes : contrairement à JSON, les clés d’un
Mapne sont pas représentées comme de véritables sous-colonnes, ce qui limite la capacité de ClickHouse à indexer, compresser et interroger efficacement.
Mapau profit du typeJSONamélioré de ClickHouse. Le typeJSONcorrige bon nombre des limites deMap:- Véritable stockage en colonnes : chaque chemin JSON est stocké sous forme de sous-colonne, ce qui permet une compression, un filtrage et une exécution vectorisée des requêtes efficaces.
- Prise en charge des types mixtes : différents types de données (par ex. entiers, chaînes, tableaux) peuvent coexister sous le même chemin sans coercition ni unification de type.
-
Scalabilité du système de fichiers : des limites internes sur les clés dynamiques (
max_dynamic_paths) et les types (max_dynamic_types) empêchent une explosion du nombre de fichiers de colonnes sur disque, même avec des ensembles de clés à forte cardinalité. -
Stockage dense : les valeurs nulles et les valeurs manquantes sont stockées de manière clairsemée afin d’éviter toute surcharge inutile.
Le type
JSONest particulièrement bien adapté aux charges de travail d’observabilité, en offrant la flexibilité d’une ingestion sans schéma avec les performances et la scalabilité des types natifs de ClickHouse — ce qui en fait un remplacement idéal deMappour les champs d’attributs dynamiques. Pour plus de détails sur le type JSON, nous recommandons le guide JSON ainsi que “How we built a new powerful JSON data type for ClickHouse”.
- Types de valeurs uniformes : les colonnes