Skip to main content

Description

Affiche à l’utilisateur courant ses propres enregistrements du journal de requêtes. Lit la table du journal de requêtes configurée par les paramètres du serveur query_log.database et query_log.table (system.query_log par défaut) et renvoie uniquement les lignes dont l’utilisateur à l’origine de la requête est égal à currentUser() (cet utilisateur est obtenu à partir de initial_user lorsqu’il est défini, sinon à partir de user). Contrairement à la table du journal de requêtes elle-même, system.user_query_log peut être lue sans aucun privilège. Les utilisateurs peuvent donc consulter leurs propres requêtes sans avoir accès à celles des autres. Cette fonctionnalité n’est prise en charge que lorsque le journal de requêtes est stocké localement. Si query_log.engine est configuré avec Distributed ou tout autre moteur qui délègue les lectures à un autre serveur, system.user_query_log refuse de le lire et lève une exception, car le contrôle d’accès requis ne peut pas être appliqué de part et d’autre d’une limite entre serveurs utilisant le protocole ClickHouse. Dans ce cas, désactivez la table avec query_log.enable_user_query_log = 0. Disponibilité system.user_query_log n’est attachée que lorsque le paramètre de serveur query_log.enable_user_query_log est activé, ce qui est le cas par défaut. Lorsque ce paramètre vaut 0, la table n’existe pas et les requêtes qui la ciblent échouent avec UNKNOWN_TABLE. Lorsque query_log.enable_user_query_log est activé mais que le journal de requêtes sous-jacent n’est pas configuré ou que sa table n’a pas encore été créée, system.user_query_log existe mais est vide. Les conditions sur la partition et les colonnes clés du journal de requêtes (event_date, event_time, query_start_time, query_id, type et autres colonnes scalaires similaires) comparées à des constantes sont appliquées directement à la table de journal de requêtes sous-jacente. Ainsi, les recherches ordinaires telles que celle de l’exemple ci-dessous bénéficient de l’élagage des partitions et ne parcourent pas l’intégralité du journal conservé. Si une table nommée system.user_query_log a été créée avant la mise à niveau vers une version de ClickHouse fournissant cette table, le serveur ne démarrera pas tant que la table existante n’aura pas été renommée ou supprimée, ou que query_log.enable_user_query_log n’aura pas été défini sur 0.

Colonnes

  • hostname (String) — Nom d’hôte du serveur exécutant la requête.
  • clickhouse_version (String) — Version du serveur ClickHouse ayant produit la ligne.
  • system_processor (String) — Architecture CPU du serveur ClickHouse ayant produit la ligne.
  • 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émarrage 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 dans l’ensemble des tables et fonctions de table participant à la requête. Cela inclut les sous-requêtes standard ainsi que les sous-requêtes utilisées avec 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 de cache n’affectent pas cette valeur.
  • read_bytes (UInt64) — Nombre total d’octets lus dans l’ensemble des tables et fonctions de table participant à la requête. Cela inclut les sous-requêtes standard ainsi que les sous-requêtes utilisées avec IN et JOIN. Pour les requêtes distribuées, read_bytes inclut le nombre total d’octets lus 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 de 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ée query_kind = Insert ; pour une insertion asynchrone, elles sont enregistrées dans l’entrée query_kind = AsyncInsertFlush, tandis que l’entrée Insert côté client enregistre uniquement les lignes acceptées du client. Pour les requêtes qui n’écrivent pas de lignes, cette 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ée query_kind = Insert ; pour une insertion asynchrone, ils sont enregistrés dans l’entrée query_kind = AsyncInsertFlush, tandis que l’entrée Insert côté client enregistre uniquement les octets acceptés du client. Pour les requêtes qui n’écrivent pas de données, cette 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ée query_kind = Insert ; pour une insertion asynchrone, ces lignes en aval sont enregistrées dans l’entrée query_kind = AsyncInsertFlush, tandis que l’entrée Insert côté client enregistre uniquement les lignes acceptées du client.
  • result_bytes (UInt64) — Quantité de mémoire vive, en octets, utilisée pour stocker le résultat d’une requête.
  • memory_usage (UInt64) — Consommation de mémoire de la requête.
  • current_database (String) — Nom de la base de données courante.
  • query (String) — Chaîne de requête.
  • formatted_query (String) — Chaîne de requête formatée.
  • normalized_query_hash (UInt64) — 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 (String) — Type de la requête.
  • databases (Array(String)) — Noms des bases de données présentes dans la requête.
  • tables (Array(String)) — Noms des tables présentes dans la requête.
  • columns (Array(String)) — Noms des colonnes présentes dans la requête.
  • partitions (Array(String)) — Noms des partitions présentes dans la requête.
  • projections (Array(String)) — Noms des projections utilisées lors de l’exécution de la requête.
  • views (Array(String)) — Noms des vues (matérialisées ou en direct) présentes dans la requête.
  • exception_code (Int32) — Code d’exception.
  • exception (String) — Message d’exception.
  • stack_trace (String) — Trace de pile. Chaîne vide si la requête s’est exécutée correctement.
  • is_initial_query (UInt8) — Indique si la requête est initiale. Valeurs possibles : 1 — requête initiale (de niveau supérieur), 0 — requête enfant initiée par une autre requête, y compris les requêtes pour l’exécution distribuée et les sous-requêtes internes.
  • connection_address (IPv6) — Adresse IP du client depuis laquelle la connexion a été établie. En cas de connexion via un proxy, il s’agit de l’adresse du proxy.
  • connection_port (UInt16) — Port client depuis lequel la connexion a été établie. En cas de connexion via un proxy, il s’agit du port du proxy.
  • user (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 si auth_use_forwarded_address est défini, il s’agit 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 si auth_use_forwarded_address est défini, il s’agit du port du client plutôt que de celui du proxy.
  • initial_user (String) — Nom de l’utilisateur qui a exécuté la requête initiale dans la même chaîne de requêtes.
  • initial_query_id (String) — ID de la requête initiale dans la même chaîne de requêtes.
  • initial_address (IPv6) — Adresse IP depuis laquelle la requête initiale de la même chaîne de requêtes a été lancée.
  • initial_port (UInt16) — Port client depuis lequel la requête initiale de la même chaîne de requêtes a été lancée.
  • initial_query_start_time (DateTime) — Heure de début de la requête initiale dans la même chaîne de requêtes.
  • initial_query_start_time_microseconds (DateTime64(6)) — Heure de début de la requête initiale dans la même chaîne de requêtes, avec une précision à la microseconde.
  • authenticated_user (String) — Nom de l’utilisateur authentifié dans la session.
  • interface (Enum8(‘Unknown’ = 0, ‘TCP’ = 1, ‘HTTP’ = 2, ‘gRPC’ = 3, ‘MySQL’ = 4, ‘PostgreSQL’ = 5, ‘Local’ = 6, ‘TCP_Interserver’ = 7, ‘Prometheus’ = 8, ‘Background’ = 9, ‘ArrowFlight’ = 10)) — Interface depuis laquelle la requête a été initiée, telle que rapportée par le client. Unknown si l’interface rapportée n’est pas reconnue par ce serveur.
  • is_secure (UInt8) — Indique si une requête a été exécutée via une interface sécurisée.
  • os_user (String) — Nom d’utilisateur du système d’exploitation exécutant clickhouse-client.
  • client_hostname (String) — Nom d’hôte de la machine cliente sur laquelle clickhouse-client ou un autre client TCP est exécuté.
  • client_name (String) — Nom de clickhouse-client ou d’un autre client TCP.
  • client_agent (String) — Agent de programmation IA ayant invoqué le client (par ex. claude-code, cursor), 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ù débute la requête dans un script contenant plusieurs requêtes pour clickhouse-client.
  • http_method (Enum8(‘UNKNOWN’ = 0, ‘GET’ = 1, ‘POST’ = 2, ‘OPTIONS’ = 3, ‘PUT’ = 4, ‘DELETE’ = 5, ‘HEAD’ = 6)) — Méthode HTTP ayant initié la requête. UNKNOWN si la requête n’est pas arrivée via HTTP, ou si la méthode rapportée n’est pas reconnue par ce serveur.
  • http_user_agent (String) — En-tête HTTP UserAgent transmis avec la requête HTTP.
  • http_referer (String) — En-tête HTTP Referer transmis avec la requête HTTP (contient l’adresse absolue ou partielle de la page à l’origine de la requête).
  • forwarded_for (String) — En-tête HTTP X-Forwarded-For transmis avec 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é transmise entre des serveurs.
  • revision (UInt32) — Révision de ClickHouse.
  • http_handler_name (String) — Nom du handler HTTP défini en SQL (CREATE HANDLER) ayant invoqué la requête. Vide si la requête n’a pas été invoquée via un tel handler.
  • http_request_url (String) — Chemin de la requête HTTP (sans la chaîne de requête) ayant invoqué la requête. La chaîne de requête est omise afin que les paramètres sensibles de la requête ne soient pas persistés. Vide pour les requêtes non HTTP.
  • log_comment (String) — Commentaire de Log. 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 participant à 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 exécutant simultanément la requête.
  • ProfileEvents (Map(String, UInt64)) — ProfileEvents mesurant différentes métriques. Leur description est disponible dans la table system.events.
  • Settings (Map(String, String)) — Settings modifiés lors de l’exécution de la requête par le client. Pour activer la journalisation des modifications de paramètres, définissez le paramètre log_query_settings sur 1.
  • used_aggregate_functions (Array(String)) — Noms canoniques des fonctions d’agrégation utilisées lors de l’exécution de la requête.
  • used_aggregate_function_combinators (Array(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(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(String)) — Noms canoniques des familles de types de données utilisées lors de l’exécution de la requête.
  • used_dictionaries (Array(String)) — Noms canoniques des dictionnaires utilisés lors de l’exécution de la requête.
  • used_formats (Array(String)) — Noms canoniques des formats utilisés lors de l’exécution de la requête.
  • used_functions (Array(String)) — Noms canoniques des fonctions utilisées lors de l’exécution de la requête.
  • used_storages (Array(String)) — Noms canoniques des stockages utilisés lors de l’exécution de la requête.
  • used_table_functions (Array(String)) — Noms canoniques des fonctions de table utilisées lors de l’exécution de la requête.
  • used_executable_user_defined_functions (Array(String)) — Noms canoniques des fonctions définies par l’utilisateur exécutables utilisées lors de l’exécution de la requête.
  • used_sql_user_defined_functions (Array(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(String)) — Liste des noms des politiques de lignes utilisées lors de l’exécution de la requête.
  • used_privileges (Array(String)) — Privilèges dont la vérification a réussi lors de l’exécution de la requête.
  • missing_privileges (Array(String)) — Privilèges manquants lors de l’exécution de la requête.
  • used_number_of_joins (UInt64) — Nombre de jointures physiques exécutées pour cette requête. Cette valeur est collectée à partir des pipelines au fur et à mesure de leur construction ; elle reflète donc les jointures qui subsistent après toutes les optimisations, et non le nombre de clauses JOIN présentes dans le texte de la requête. Une jointure est comptabilisée quel que soit son niveau d’imbrication : les sous-requêtes, les expressions de table communes, les vues, les vues de vues et le SELECT d’une vue matérialisée déclenchée par un INSERT sont tous comptabilisés dans la ligne de la requête envoyée. Cette valeur peut donc être non nulle pour une requête dont le texte ne contient lui-même aucun JOIN. Une requête qui construit un pipeline sans l’exécuter, comme EXPLAIN PIPELINE, rapporte les jointures de la requête qu’elle explique. Certains pipelines sont assemblés plusieurs fois au cours de l’exécution d’une même requête : le SELECT d’une vue matérialisée est assemblé pour chaque bloc de l’INSERT qui la déclenche et par chaque flux d’insertion, le membre récursif d’une CTE récursive est assemblé à chaque itération, et la relation d’une boucle est réassemblée à chaque redémarrage. Les jointures d’un tel pipeline ne sont néanmoins comptabilisées qu’une seule fois : ce nombre décrit donc la requête, et non le nombre de fois où ses pipelines ont été assemblés.
  • used_join_algorithms (Array(String)) — Algorithmes des jointures comptabilisées dans used_number_of_joins : ‘HASH’, ‘PARALLEL_HASH’, ‘GRACE_HASH’, ‘PARTIAL_MERGE’, ‘FULL_SORTING_MERGE’, ‘PARALLEL_FULL_SORTING_MERGE’, ‘IE_JOIN’, ‘DIRECT’, ‘PASTE’ et ‘CONSTANT’, triés et dédupliqués, de sorte qu’un algorithme partagé par plusieurs jointures n’apparaît qu’une seule fois. Il s’agit de l’algorithme choisi pour exécuter chaque jointure, et non des algorithmes autorisés par le paramètre join_algorithm. Un algorithme peut être remplacé par un autre en cours d’exécution, auquel cas les deux sont indiqués.
  • used_join_kinds (Array(String)) — Types des jointures comptabilisées dans used_number_of_joins, avec un élément par jointure, de sorte qu’un type partagé par plusieurs jointures apparaît plusieurs fois. Les éléments sont triés et ne suivent pas l’ordre d’exécution. Chaque type correspond à celui qui a réellement été exécuté, lequel peut différer du texte de la requête, car l’optimiseur de requêtes peut exécuter une jointure en inversant ses côtés, transformant ainsi LEFT en RIGHT.
  • used_join_strictness (Array(String)) — Rigueur (strictness) des jointures comptabilisées dans used_number_of_joins, avec un élément par jointure, dans le même ordre que used_join_kinds : l’élément situé à un index donné décrit la même jointure dans les deux tableaux.
  • spilled_to_disk (Array(String)) — Opérateurs ayant écrit des données dans des fichiers temporaires sur disque (traitement en mémoire externe) lors de l’exécution de la requête, triés et dédupliqués. Un tableau vide signifie que la requête s’est exécutée entièrement en mémoire.
  • transaction_id (Tuple(UInt64, UInt64, UUID, Int64)) — 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 des résultats de requêtes ni lu depuis celui-ci, ‘Write’ = Le résultat de la requête a été écrit dans le cache des résultats de requêtes, ‘Read’ = Le résultat de la requête a été lu depuis le cache des résultats de requêtes.
  • asynchronous_read_counters (Map(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.
Alias :
  • ProfileEvents.Names — alias de mapKeys(ProfileEvents).
  • ProfileEvents.Values — alias de mapValues(ProfileEvents).
  • Settings.Names — alias de mapKeys(Settings).
  • Settings.Values — alias de mapValues(Settings).

Exemple

Dernière modification le 26 septembre 2026