- index primaire épars - Ordonne les données sur disque selon une clé choisie, ce qui permet à ClickHouse d’ignorer de larges plages de lignes non pertinentes lors des requêtes.
- Types de données enrichis - Prise en charge native de types tels que JSON, LowCardinality et Enum, pour un stockage plus compact et un traitement plus rapide.
- Index de saut et index de texte intégral - Structures d’index secondaires qui permettent à ClickHouse d’ignorer les granules ne correspondant pas aux prédicats de filtrage d’une requête, particulièrement efficaces pour les charges de travail de recherche textuelle.
- Insertions rapides avec compaction automatique - ClickHouse est conçu pour des insertions à haut débit et fusionne automatiquement les data parts en arrière-plan, de manière analogue à la compaction dans les formats de table ouverts.
- Optimisé pour les lectures concurrentes - Le stockage columnar de MergeTree, combiné à plusieurs couches de cache, prend en charge des charges de travail analytiques en temps réel avec une forte concurrence, ce pour quoi les formats de table ouverts n’ont pas été conçus.
INSERT INTO SELECT afin d’accélérer les analyses.
Se connecter au catalogue
Lister les tables
Explorez le schéma
Requête sur la table du lac de données
logger_name peuvent présenter une cardinalité trop élevée pour permettre un partitionnement efficace. Nous ne disposons pas non plus d’indices tels que les index de texte pour réduire davantage le volume de données à analyser. C’est là que MergeTree excelle.
Charger des données dans une table MergeTree
Créer une table optimisée
- Pas d’encapsulation
Nullable- supprimerNullableaméliore l’efficacité du stockage et les performances des requêtes. LowCardinality(String)sur les colonneslevel,instance_type,thread_nameetcheck_name- encode par dictionnaire une colonne comportant peu de valeurs distinctes, pour une meilleure compression et un filtrage plus rapide.- Un index de texte intégral sur la colonne
message- accélère les recherches textuelles basées sur des tokens, commehasToken(message, 'error'). - Une clé
ORDER BYde(instance_type, thread_name, toStartOfMinute(event_time))- aligne les données sur le disque avec les filtres les plus courants afin que l’index primaire épars puisse ignorer les granules non pertinentes.
Insérer des données depuis le catalogue
INSERT INTO SELECT pour charger les ~300 M de lignes de la table du lac de données dans notre table ClickHouse :
Réexécuter la requête
- index primaire épars - La clé
ORDER BY (instance_type, thread_name, ...)permet à ClickHouse d’accéder directement aux granules correspondant àinstance_type = 'm6i.4xlarge'etthread_name = 'TCPHandler', ce qui réduit le nombre de lignes traitées de 283 millions à seulement 14 millions. - Index de texte intégral - L’index
text_idxsur la colonnemessagepermet àhasToken(message, 'error')d’être résolu via l’index plutôt qu’en parcourant chaque chaîne de message, ce qui réduit encore la quantité de données que ClickHouse doit lire.