Skip to main content
All quickstarts
ObservabilityOSS

Prérequis

Ce que vous allez créer

Dans OpenTelemetry, chaque span de trace contient un ensemble d’attributs de ressource — des métadonnées clé-valeur qui décrivent l’entité ayant produit la télémétrie (nom du service, hôte, région cloud, pod Kubernetes, etc.). L’ensemble des clés varie selon les services et les environnements, ce qui en fait un cas d’usage naturel pour le type Map de ClickHouse : les clés sont dynamiques et spécifiques à l’application, mais une ligne donnée n’en contient généralement qu’une poignée. Dans ce guide de démarrage rapide, vous utiliserez clickhouse-local pour charger de vraies données de trace OTel à partir d’un fichier CSV dans une table comportant des colonnes Map(LowCardinality(String), String), et vous apprendrez à interroger, filtrer, agréger et optimiser des données de type map.
1

Télécharger les données d’exemple

Le jeu de données contient 6 120 spans de traces OTel exportés à partir d’une application de microservices de démonstration. Chaque ligne comprend une colonne ResourceAttributes et une colonne SpanAttributes contenant des paires clé-valeur dynamiques sous forme de mappages JSON. Enregistrez le fichier dans un répertoire facile à retrouver, par exemple ~/data/data-otel-traces.csv.Télécharger data-otel-traces.csv (2,9 Mo)Voici à quoi ressemble une ligne :
2

Créer la table et charger les données

Lancez clickhouse-local et créez la table suivante avec un schéma correspondant à celui du CSV. La colonne de clé est ResourceAttributes Map(LowCardinality(String), String) - LowCardinality est utilisé pour le type de clé, car les clés d’attribut OTel sont tirées d’un ensemble relativement restreint et répétitif.
Chargez maintenant le CSV à l’aide du moteur de table file. Adaptez le chemin à l’emplacement où vous avez enregistré le fichier :
Vérifiez que les données ont bien été chargées :
Vous devriez voir 6 120 lignes.
3

Interroger les données

Accéder à une clé spécifique — utilisez la syntaxe entre crochets pour récupérer une valeur dans la map. Si la clé n’existe pas pour une ligne donnée, vous obtenez la valeur par défaut du type de valeur (chaîne vide pour String) :
Filtrer par valeur de map — trouver tous les spans associés à un nom de service donné :
Vérifiez si une clé existe — tous les spans ne contiennent pas de métadonnées Kubernetes. Utilisez mapContains pour repérer ceux qui en ont :
Inspectez toutes les clés présentes dans le jeu de données — utile pour comprendre ce que produit l’instrumentation :
Décomposer une map en lignes avec ARRAY JOIN — transformez chaque paire clé-valeur en ligne distincte, ce qui est pratique pour créer des inventaires d’attributs ou alimenter des tableaux de bord :
Filtrer les maps avec mapFilter — extrayez uniquement les attributs relatifs à Kubernetes de chaque span :
Repérez les spans d’erreur et leur contexte de ressource — combinez des filtres classiques sur les colonnes avec l’accès à la map :
4

Agréger des maps avec le combinateur -Map

Le combinateur d’agrégation -Map de ClickHouse vous permet d’appliquer n’importe quelle fonction d’agrégation à une colonne Map afin qu’elle s’applique indépendamment à chaque clé. Le résultat est lui aussi une Map — une entrée par clé, avec la valeur agrégée. C’est particulièrement utile pour les métriques OTel, où les compteurs ou les gauges sont stockés dans des valeurs de map.Pour le montrer, créez une petite table de métriques dans laquelle chaque ligne enregistre le nombre de codes d’état HTTP sous forme de Map(String, UInt64) :
Utilisez maintenant sumMap pour obtenir le total des occurrences par code d’état pour chaque service :
Le suffixe -Map fonctionne avec n’importe quelle fonction d’agrégation ; vous pouvez donc utiliser minMap, maxMap ou avgMap tout aussi facilement :
Vous pouvez également le combiner avec d’autres combinateurs. Par exemple, sumMapIf permet d’agréger de manière conditionnelle — ici, en additionnant uniquement les fenêtres d’une minute où le service présentait déjà des erreurs :
Pourquoi c’est important pour OTel : lorsque votre OTel Collector écrit dans ClickHouse une ventilation par minute des codes de statut, sumMap vous permet de les agréger en totaux horaires ou quotidiens dans une seule requête — sans ARRAY JOIN, sans dé-pivotage, et sans avoir à connaître à l’avance l’ensemble des clés. Toute clé présente dans n’importe quelle ligne est automatiquement incluse dans le résultat.
5

Optimisez les clés fréquemment utilisées dans les requêtes

Si vous constatez que vous filtrez constamment sur la même clé de map — host.name est un cas courant — vous pouvez l’extraire dans une colonne matérialisée. Cela évite de parcourir linéairement la map à chaque requête :
Pour les données existantes, remplissez la colonne rétroactivement :
Désormais, WHERE HostName = 'prod-cart-01' ne lit qu’une seule colonne dédiée au lieu de l’intégralité de la Map. C’est l’approche recommandée dans le schéma OTel de ClickHouse pour tout attribut que vous interrogez fréquemment.

Points clés à retenir

  • Map(LowCardinality(String), String) est le type idiomatique pour les attributs OTel — suffisamment flexible pour gérer des ensembles de clés variables, et LowCardinality permet de stocker efficacement les clés.
  • La syntaxe entre crochets (map['key']) est la façon la plus courante d’accéder aux valeurs, mais gardez à l’esprit qu’elle effectue un balayage linéaire — très bien pour des maps contenant quelques dizaines de clés, moins adapté pour des centaines.
  • Les colonnes matérialisées sont la solution de secours : lorsqu’une clé de map devient un filtre fréquemment utilisé, faites-en une vraie colonne pour un accès indexé et colonnaire.
  • mapContains, mapKeys, mapValues, mapFilter et ARRAY JOIN vous offrent une boîte à outils complète pour explorer et transformer des données de type map sans quitter SQL.
  • Le combinateur d’agrégation -Map (sumMap, avgMap, maxMap, etc.) agrège chaque clé indépendamment d’une ligne à l’autre — idéal pour consolider des compteurs de métriques OTel sans avoir à connaître l’ensemble de clés à l’avance. Il se combine aussi avec d’autres combinateurs (par ex. sumMapIf).

Étapes suivantes

Poursuivez avec les guides de démarrage rapide suivants : Ou allez plus loin avec la documentation de référence :
ClickHouse Academy — Master ClickHouse with expert-designed training for every skill level

Check out the ClickHouse academy for on-demand and live training

Dernière modification le 28 août 2026