Interroger dans ClickHouse CloudLes données de cette table système sont stockées localement sur chaque nœud de ClickHouse Cloud. Pour obtenir une vue complète de l’ensemble des données, il faut donc utiliser la fonction
clusterAllReplicas. Consultez cette page pour plus de détails.Description
flush_interval_milliseconds dans la section des paramètres du serveur query_log. Pour forcer le vidage, utilisez la requête SYSTEM FLUSH LOGS.
ClickHouse ne supprime pas automatiquement les données de la table. Voir Introduction pour plus de détails.
La table system.query_log enregistre deux types de requêtes :
- Les requêtes initiales exécutées directement par le client.
- Les requêtes enfants initiées par d’autres requêtes (pour l’exécution distribuée des requêtes). Pour ces types de requêtes, les informations sur les requêtes parentes sont affichées dans les colonnes
initial_*.
query_log, selon le statut (voir la colonne type) de la requête :
- Si l’exécution de la requête a réussi, deux lignes avec les types
QueryStartetQueryFinishsont créées. - Si une erreur s’est produite pendant le traitement de la requête, deux événements avec les types
QueryStartetExceptionWhileProcessingsont créés. - Si une erreur s’est produite avant le lancement de la requête, un seul événement avec le type
ExceptionBeforeStartest créé.
query_log.
Vous pouvez utiliser le paramètre log_formatted_queries pour consigner les requêtes mises en forme dans la colonne formatted_query.
Colonnes
hostname(LowCardinality(String)) — Nom d’hôte du serveur qui exécute la requête.type(Enum8(‘QueryStart’ = 1, ‘QueryFinish’ = 2, ‘ExceptionBeforeStart’ = 3, ‘ExceptionWhileProcessing’ = 4)) — Type d’événement survenu lors de l’exécution de la requête. Valeurs :QueryStart— démarrage réussi de l’exécution de la requête,QueryFinish— fin réussie de l’exécution de la requête,ExceptionBeforeStart— exception avant le début de l’exécution de la requête,ExceptionWhileProcessing— exception pendant l’exécution de la requête.event_date(Date) — Date de début de la requête.event_time(DateTime) — Heure de début de la requête.event_time_microseconds(DateTime64(6)) — Heure de début de la requête avec une précision à la microseconde.query_start_time(DateTime) — Heure de début de l’exécution de la requête.query_start_time_microseconds(DateTime64(6)) — Heure de début de l’exécution de la requête avec une précision à la microseconde.query_duration_ms(UInt64) — Durée d’exécution de la requête en millisecondes.read_rows(UInt64) — Nombre total de lignes lues depuis toutes les tables et fonctions de table participant à la requête. Cela inclut les sous-requêtes classiques, les sous-requêtes pour IN et JOIN. Pour les requêtes distribuées, read_rows inclut le nombre total de lignes lues sur toutes les répliques. Chaque réplique envoie sa valeur read_rows, et le serveur initiateur de la requête additionne toutes les valeurs reçues et locales. Les volumes du cache n’affectent pas cette valeur.read_bytes(UInt64) — Nombre total d’octets lus depuis toutes les tables et fonctions de table participant à la requête. Cela inclut les sous-requêtes classiques, les sous-requêtes pour IN et JOIN. Pour les requêtes distribuées, read_bytes inclut le nombre total de lignes lues sur toutes les répliques. Chaque réplique envoie sa valeur read_bytes, et le serveur initiateur de la requête additionne toutes les valeurs reçues et locales. Les volumes du cache n’affectent pas cette valeur.written_rows(UInt64) — Nombre de lignes écrites par la requête, y compris les lignes écrites par les insertions en aval déclenchées par le pipeline, telles que les vues matérialisées attachées. Pour une insertion synchrone, ces lignes en aval sont enregistrées dans l’entréequery_kind=Insert; pour une insertion asynchrone, elles sont enregistrées dans l’entréequery_kind=AsyncInsertFlush, tandis que l’entréeInsertcôté client n’enregistre que les lignes acceptées du client. Pour les requêtes qui n’écrivent pas de lignes, la valeur est 0.written_bytes(UInt64) — Nombre d’octets écrits par la requête (non compressés), y compris les octets écrits par les insertions en aval déclenchées par le pipeline, telles que les vues matérialisées attachées. Pour une insertion synchrone, ces octets en aval sont enregistrés dans l’entréequery_kind=Insert; pour une insertion asynchrone, ils sont enregistrés dans l’entréequery_kind=AsyncInsertFlush, tandis que l’entréeInsertcôté client n’enregistre que les octets acceptés du client. Pour les requêtes qui n’écrivent pas de données, la valeur est 0.result_rows(UInt64) — Nombre de lignes dans le résultat d’une requête SELECT, ou nombre de lignes écrites par une insertion. Pour une insertion synchrone, cela inclut les lignes écrites par les insertions en aval déclenchées par le pipeline (telles que les vues matérialisées attachées) dans l’entréequery_kind=Insert; pour une insertion asynchrone, ces lignes en aval sont enregistrées dans l’entréequery_kind=AsyncInsertFlush, tandis que l’entréeInsertcôté client n’enregistre que les lignes acceptées du client.result_bytes(UInt64) — Volume de RAM, en octets, utilisé pour stocker le résultat d’une requête.memory_usage(UInt64) — Consommation de mémoire de la requête.current_database(LowCardinality(String)) — Nom de la base de données courante.query(String) — Texte de la requête.formatted_query(String) — Texte mis en forme de la requête.normalized_query_hash(UInt64) — Une valeur de hachage numérique, identique par exemple pour des requêtes qui ne diffèrent que par les valeurs des littéraux.query_kind(LowCardinality(String)) — Type de la requête.databases(Array(LowCardinality(String))) — Noms des bases de données présentes dans la requête.tables(Array(LowCardinality(String))) — Noms des tables présentes dans la requête.columns(Array(LowCardinality(String))) — Noms des colonnes présentes dans la requête.partitions(Array(LowCardinality(String))) — Noms des partitions présentes dans la requête.projections(Array(LowCardinality(String))) — Noms des projections utilisées lors de l’exécution de la requête.views(Array(LowCardinality(String))) — Noms des vues (matérialisées ou live) présentes dans la requête.exception_code(Int32) — Code de l’exception.exception(String) — Message d’exception.stack_trace(String) — Trace de pile. Chaîne vide si la requête s’est terminée avec succès.is_initial_query(UInt8) — Type de requête. Valeurs possibles : 1 — la requête a été initiée par le client, 0 — la requête a été initiée par une autre requête dans le cadre de l’exécution distribuée des requêtes.connection_address(IPv6) — Adresse IP du client à partir de laquelle la connexion a été établie. En cas de connexion via un proxy, il s’agira de l’adresse du proxy.connection_port(UInt16) — Port client à partir duquel la connexion a été établie. En cas de connexion via un proxy, il s’agira du port du proxy.user(LowCardinality(String)) — Nom de l’utilisateur qui a initié la requête en cours.query_id(String) — ID de la requête.address(IPv6) — Adresse IP utilisée pour effectuer la requête. En cas de connexion via un proxy et siauth_use_forwarded_addressest défini, il s’agira de l’adresse du client plutôt que de celle du proxy.port(UInt16) — Port client utilisé pour effectuer la requête. En cas de connexion via un proxy et siauth_use_forwarded_addressest défini, il s’agira du port du client plutôt que de celui du proxy.initial_user(LowCardinality(String)) — Nom de l’utilisateur qui a exécuté la requête initiale (pour l’exécution distribuée des requêtes).initial_query_id(String) — ID de la requête initiale (pour l’exécution distribuée des requêtes).initial_address(IPv6) — Adresse IP depuis laquelle la requête parente a été lancée.initial_port(UInt16) — Port client utilisé pour exécuter la requête parente.initial_query_start_time(DateTime) — Heure de début de la requête initiale (pour l’exécution distribuée des requêtes).initial_query_start_time_microseconds(DateTime64(6)) — Heure de début de la requête initiale avec une précision à la microseconde (pour l’exécution distribuée des requêtes).authenticated_user(LowCardinality(String)) — Nom de l’utilisateur authentifié dans la session.interface(UInt8) — Interface à partir de laquelle la requête a été lancée. Valeurs possibles : 1 — TCP, 2 — HTTP.is_secure(UInt8) — Indique si une requête a été exécutée via une interface sécurisée.os_user(LowCardinality(String)) — Nom d’utilisateur du système d’exploitation qui exécute clickhouse-client.client_hostname(LowCardinality(String)) — Nom d’hôte de la machine cliente sur laquelle clickhouse-client ou un autre client TCP s’exécute.client_name(LowCardinality(String)) — Nom de clickhouse-client ou d’un autre client TCP.client_agent(LowCardinality(String)) — L’agent IA de développement qui a invoqué le client (par exemple,claude-codeoucursor), détecté à partir des variables d’environnement. Vide si aucun agent n’a été détecté.client_revision(UInt32) — Révision de clickhouse-client ou d’un autre client TCP.client_version_major(UInt32) — Version majeure de clickhouse-client ou d’un autre client TCP.client_version_minor(UInt32) — Version mineure de clickhouse-client ou d’un autre client TCP.client_version_patch(UInt32) — Composant correctif de la version de clickhouse-client ou d’un autre client TCP.script_query_number(UInt32) — Numéro de la requête dans un script contenant plusieurs requêtes pour clickhouse-client.script_line_number(UInt32) — Numéro de la ligne où commence la requête dans un script contenant plusieurs requêtes pour clickhouse-client.http_method(UInt8) — Méthode HTTP qui a lancé la requête. Valeurs possibles : 0 — La requête a été lancée depuis l’interface TCP, 1 — La méthode GET a été utilisée, 2 — La méthode POST a été utilisée.http_user_agent(LowCardinality(String)) — En-tête HTTP UserAgent transmis dans la requête HTTP.http_referer(String) — En-tête HTTP Referer transmis dans la requête HTTP (contient une adresse absolue ou partielle de la page à l’origine de la requête).forwarded_for(String) — En-tête HTTP X-Forwarded-For transmis dans la requête HTTP.quota_key(String) — Clé de quota spécifiée dans le paramètre quotas (voir keyed).distributed_depth(UInt64) — Nombre de fois qu’une requête a été transférée entre serveurs.revision(UInt32) — Révision de ClickHouse.log_comment(String) — Commentaire du journal. Il peut être défini sur une chaîne arbitraire ne dépassant pas max_query_size. Chaîne vide s’il n’est pas défini.thread_ids(Array(UInt64)) — Identifiants des threads qui participent à l’exécution de la requête. Ces threads peuvent ne pas s’être exécutés simultanément.peak_threads_usage(UInt64) — Nombre maximal de threads simultanés exécutant la requête.ProfileEvents(Map(LowCardinality(String), UInt64)) — ProfileEvents qui mesurent différentes métriques. Leur description se trouve dans la table system.events.Settings(Map(LowCardinality(String), LowCardinality(String))) — Paramètres modifiés lorsque le client a exécuté la requête. Pour activer la journalisation des modifications de paramètres, définissez le paramètre log_query_settings sur 1.used_aggregate_functions(Array(LowCardinality(String))) — Noms canoniques des fonctions d’agrégation utilisées pendant l’exécution de la requête.used_aggregate_function_combinators(Array(LowCardinality(String))) — Noms canoniques des combinateurs de fonctions d’agrégation utilisés lors de l’exécution de la requête.used_database_engines(Array(LowCardinality(String))) — Noms canoniques des moteurs de base de données utilisés lors de l’exécution de la requête.used_data_type_families(Array(LowCardinality(String))) — Noms canoniques des familles de types de données utilisées lors de l’exécution de la requête.used_dictionaries(Array(LowCardinality(String))) — Noms canoniques des dictionnaires utilisés lors de l’exécution de la requête.used_formats(Array(LowCardinality(String))) — Noms canoniques des formats utilisés lors de l’exécution de la requête.used_functions(Array(LowCardinality(String))) — Noms canoniques des fonctions utilisées lors de l’exécution de la requête.used_storages(Array(LowCardinality(String))) — Noms canoniques des stockages utilisés lors de l’exécution de la requête.used_table_functions(Array(LowCardinality(String))) — Noms canoniques des fonctions de table utilisées lors de l’exécution de la requête.used_executable_user_defined_functions(Array(LowCardinality(String))) — Noms canoniques des fonctions exécutables définies par l’utilisateur utilisées lors de l’exécution de la requête.used_sql_user_defined_functions(Array(LowCardinality(String))) — Noms canoniques des fonctions SQL définies par l’utilisateur utilisées lors de l’exécution de la requête.used_row_policies(Array(LowCardinality(String))) — Liste des noms des politiques de ligne utilisées lors de l’exécution de la requête.used_privileges(Array(LowCardinality(String))) — Privilèges dont la vérification a réussi lors de l’exécution de la requête.missing_privileges(Array(LowCardinality(String))) — Privilèges manquants lors de l’exécution de la requête.transaction_id(Tuple(UInt64, UInt64, UUID)) — Identifiant de la transaction dans le cadre de laquelle cette requête a été exécutée.query_cache_usage(Enum8(‘Unknown’ = 0, ‘None’ = 1, ‘Write’ = 2, ‘Read’ = 3)) — Utilisation du cache de requêtes lors de l’exécution de la requête. Valeurs : ‘Unknown’ = statut inconnu, ‘None’ = le résultat de la requête n’a été ni écrit dans le cache de résultats de requêtes ni lu depuis celui-ci, ‘Write’ = le résultat de la requête a été écrit dans le cache de résultats de requêtes, ‘Read’ = le résultat de la requête a été lu depuis le cache de résultats de requêtes.asynchronous_read_counters(Map(LowCardinality(String), UInt64)) — Métriques de lecture asynchrone.is_internal(UInt8) — Indique s’il s’agit d’une requête auxiliaire exécutée en interne.
ProfileEvents.Names— alias demapKeys(ProfileEvents).ProfileEvents.Values— alias demapValues(ProfileEvents).Settings.Names— alias demapKeys(Settings).Settings.Values— alias demapValues(Settings).
Exemples
system.query_log est local à chaque nœud ; pour voir tous les enregistrements, vous devez interroger via clusterAllReplicas.
Par exemple, pour agréger les lignes de query_log de chaque réplique du cluster « default », vous pouvez écrire :
Voir aussi
- system.query_thread_log — Cette table contient des informations sur chaque thread d’exécution d’une requête.