Описание
Показывает текущему пользователю записи из его журнала запросов. Читает таблицу журнала запросов, заданную настройками сервера query_log.database и query_log.table (по умолчанию — system.query_log), и возвращает только строки, в которых пользователь-инициатор равен currentUser() (если задан initial_user, используется он, иначе — user).
В отличие от самой таблицы журнала запросов, system.user_query_log можно читать без каких-либо привилегий, поэтому пользователи могут просматривать собственные запросы, не получая доступа к запросам других пользователей.
Это поддерживается только при локальном хранении журнала запросов. Если для query_log.engine задан Distributed или другой движок, который делегирует чтение другому серверу, system.user_query_log отказывается читать из такой таблицы и генерирует исключение, поскольку требуемую проверку доступа невозможно обеспечить через границу серверов, взаимодействующих по протоколу ClickHouse. В этом случае отключите таблицу, установив query_log.enable_user_query_log = 0.
Таблицу можно отключить настройкой сервера query_log.enable_user_query_log. Если журнал запросов не настроен или его таблица ещё не создана, system.user_query_log будет пустой.
Условия для партиции и столбцов ключа журнала запросов (event_date, event_time, query_start_time, query_id, type и аналогичных скалярных столбцов), сравниваемые с константами, передаются в базовую таблицу журнала запросов, поэтому при обычных обращениях, таких как в приведённом ниже примере, сохраняется отсечение партиций и не выполняется сканирование всего хранимого журнала.
Столбцы
hostname(String) — Имя хоста сервера, выполняющего запрос.type(Enum8('QueryStart' = 1, 'QueryFinish' = 2, 'ExceptionBeforeStart' = 3, 'ExceptionWhileProcessing' = 4)) — Тип события, произошедшего при выполнении запроса. Значения:QueryStart— успешное начало выполнения запроса,QueryFinish— успешное завершение выполнения запроса,ExceptionBeforeStart— исключение до начала выполнения запроса,ExceptionWhileProcessing— исключение во время выполнения запроса.event_date(Date) — Дата начала запроса.event_time(DateTime) — Время начала запроса.event_time_microseconds(DateTime64(6)) — Время начала запроса с точностью до микросекунд.query_start_time(DateTime) — Время начала выполнения запроса.query_start_time_microseconds(DateTime64(6)) — Время начала выполнения запроса с точностью до микросекунд.query_duration_ms(UInt64) — Длительность выполнения запроса в миллисекундах.read_rows(UInt64) — Общее количество строк, прочитанных из всех таблиц и табличных функций, задействованных в запросе. Включает обычные подзапросы, а также подзапросы для IN и JOIN. Для распределённых запросов read_rows включает общее количество строк, прочитанных на всех репликах. Каждая реплика отправляет своё значение read_rows, а сервер-инициатор запроса суммирует полученные значения с локальным. Объёмы кэша не влияют на это значение.read_bytes(UInt64) — Общее количество байтов, прочитанных из всех таблиц и табличных функций, задействованных в запросе. Включает обычные подзапросы, а также подзапросы для IN и JOIN. Для распределённых запросов read_bytes включает общее количество строк, прочитанных на всех репликах. Каждая реплика отправляет своё значение read_bytes, а сервер-инициатор запроса суммирует полученные значения с локальным. Объёмы кэша не влияют на это значение.written_rows(UInt64) — Количество строк, записанных запросом, включая строки, записанные последующими вставками, запускаемыми конвейером, например подключёнными materialized views. Для синхронной вставки эти последующие строки регистрируются в записиquery_kind=Insert; для асинхронной вставки они регистрируются в записиquery_kind=AsyncInsertFlush, тогда как записьInsert, видимая клиенту, содержит только строки, принятые от клиента. Для запросов, не записывающих строки, значение равно 0.written_bytes(UInt64) — Количество байтов, записанных запросом (без сжатия), включая байты, записанные последующими вставками, запускаемыми конвейером, например подключёнными materialized views. Для синхронной вставки эти последующие байты регистрируются в записиquery_kind=Insert; для асинхронной вставки они регистрируются в записиquery_kind=AsyncInsertFlush, тогда как записьInsert, видимая клиенту, содержит только байты, принятые от клиента. Для запросов, не записывающих данные, значение равно 0.result_rows(UInt64) — Количество строк в результате SELECT-запроса или количество строк, записанных вставкой. Для синхронной вставки сюда входят строки, записанные последующими вставками, запускаемыми конвейером (например, подключёнными materialized views), в записиquery_kind=Insert; для асинхронной вставки эти последующие строки регистрируются в записиquery_kind=AsyncInsertFlush, тогда как записьInsert, видимая клиенту, содержит только строки, принятые от клиента.result_bytes(UInt64) — Объём оперативной памяти в байтах, используемый для хранения результата запроса.memory_usage(UInt64) — Потребление памяти запросом.current_database(String) — Имя текущей базы данных.query(String) — Строка запроса.formatted_query(String) — Форматированная строка запроса.normalized_query_hash(UInt64) — Числовое хеш-значение, одинаковое, например, для запросов, различающихся только значениями литералов.query_kind(String) — Тип запроса.databases(Array(String)) — Имена баз данных, указанных в запросе.tables(Array(String)) — Имена таблиц, указанных в запросе.columns(Array(String)) — Имена столбцов, указанных в запросе.partitions(Array(String)) — Имена партиций, указанных в запросе.projections(Array(String)) — Имена проекций, использованных при выполнении запроса.views(Array(String)) — Имена (материализованных или живых) представлений, указанных в запросе.exception_code(Int32) — Код исключения.exception(String) — Сообщение исключения.stack_trace(String) — Трассировка стека. Пустая строка, если запрос успешно выполнен.is_initial_query(UInt8) — Является ли запрос исходным. Возможные значения: 1 — исходный (верхнеуровневый) запрос, 0 — дочерний запрос, инициированный другим запросом, включая запросы для распределённого выполнения и внутренние подзапросы.connection_address(IPv6) — IP-адрес клиента, с которого установлено соединение. При подключении через прокси это адрес прокси.connection_port(UInt16) — Порт клиента, с которого установлено соединение. При подключении через прокси это порт прокси.user(String) — Имя пользователя, инициировавшего текущий запрос.query_id(String) — ID запроса.address(IPv6) — IP-адрес, с которого выполнен запрос. При подключении через прокси и включённой настройкеauth_use_forwarded_addressэто адрес клиента, а не прокси.port(UInt16) — Порт клиента, с которого выполнен запрос. При подключении через прокси и включённой настройкеauth_use_forwarded_addressэто порт клиента, а не прокси.initial_user(String) — Имя пользователя, выполнившего исходный запрос в той же цепочке запросов.initial_query_id(String) — ID исходного запроса в той же цепочке запросов.initial_address(IPv6) — IP-адрес, с которого был запущен исходный запрос в той же цепочке запросов.initial_port(UInt16) — Порт клиента, с которого был запущен исходный запрос в той же цепочке запросов.initial_query_start_time(DateTime) — Время запуска исходного запроса в той же цепочке запросов.initial_query_start_time_microseconds(DateTime64(6)) — Время запуска исходного запроса в той же цепочке запросов с точностью до микросекунд.authenticated_user(String) — Имя пользователя, прошедшего аутентификацию в сеансе.interface(UInt8) — Интерфейс, через который был инициирован запрос. Возможные значения: 1 — TCP, 2 — HTTP.is_secure(UInt8) — Флаг, указывающий, был ли запрос выполнен через защищённый интерфейсos_user(String) — Имя пользователя операционной системы, запускающего clickhouse-client.client_hostname(String) — Имя хоста клиентской машины, на которой запущен clickhouse-client или другой TCP-клиент.client_name(String) — Имя clickhouse-client или другого TCP-клиента.client_agent(String) — Агент ИИ для написания кода, вызвавший клиент (например,claude-code,cursor); определяется по переменным окружения. Пустое значение, если агент не обнаружен.client_revision(UInt32) — Ревизия clickhouse-client или другого TCP-клиента.client_version_major(UInt32) — Мажорная версия clickhouse-client или другого TCP-клиента.client_version_minor(UInt32) — Минорная версия clickhouse-client или другого TCP-клиента.client_version_patch(UInt32) — Компонент патча версии clickhouse-client или другого TCP-клиента.script_query_number(UInt32) — Номер запроса в скрипте с несколькими запросами, выполняемом через clickhouse-client.script_line_number(UInt32) — Номер строки, с которой начинается запрос в скрипте с несколькими запросами, выполняемом через clickhouse-client.http_method(UInt8) — HTTP-метод, инициировавший запрос. Возможные значения: 0 — запрос запущен через TCP-интерфейс, 1 — использован метод GET, 2 — использован метод POST, 4 — использован метод PUT, 5 — использован метод DELETE, 6 — использован метод HEAD.http_user_agent(String) — HTTP-заголовок UserAgent, переданный в HTTP-запросе.http_referer(String) — HTTP-заголовок Referer, переданный в HTTP-запросе (содержит полный или частичный адрес страницы, отправившей запрос).forwarded_for(String) — HTTP-заголовок X-Forwarded-For, переданный в HTTP-запросе.quota_key(String) — Ключ квоты, указанный в настройке quotas (см. keyed).distributed_depth(UInt64) — Количество перенаправлений запроса между серверами.revision(UInt32) — Ревизия ClickHouse.http_handler_name(String) — Имя определённого в SQL HTTP-обработчика (CREATE HANDLER), вызвавшего запрос. Пустое значение, если запрос не был вызван через такой обработчик.http_request_url(String) — Путь HTTP-запроса (без строки запроса), вызвавшего запрос. Строка запроса исключается, чтобы конфиденциальные параметры запроса не сохранялись. Пустое значение для запросов, не использующих HTTP.log_comment(String) — Комментарий Log. Его можно задать произвольной строкой длиной не более max_query_size. Если он не задан, возвращается пустая строка.thread_ids(Array(UInt64)) — Идентификаторы потоков, участвующих в выполнении запроса. Эти потоки могли выполняться не одновременно.peak_threads_usage(UInt64) — Максимальное количество потоков, одновременно выполняющих запрос.ProfileEvents(Map(String, UInt64)) — ProfileEvents, отражающие различные метрики. Их описание приведено в таблице system.events.Settings(Map(String, String)) — Settings, изменённые при выполнении запроса клиентом. Чтобы включить журналирование изменений настроек, задайте параметру log_query_settings значение 1.used_aggregate_functions(Array(String)) — Канонические имена агрегатных функций, использованных при выполнении запроса.used_aggregate_function_combinators(Array(String)) — Канонические имена комбинаторов агрегатных функций, использованных при выполнении запроса.used_database_engines(Array(String)) — Канонические имена движков баз данных, использованных при выполнении запроса.used_data_type_families(Array(String)) — Канонические имена семейств типов данных, использованных при выполнении запроса.used_dictionaries(Array(String)) — Канонические имена словарей, использованных при выполнении запроса.used_formats(Array(String)) — Канонические имена форматов, использованных при выполнении запроса.used_functions(Array(String)) — Канонические имена функций, использованных при выполнении запроса.used_storages(Array(String)) — Канонические имена хранилищ, использованных при выполнении запроса.used_table_functions(Array(String)) — Канонические имена табличных функций, использованных при выполнении запроса.used_executable_user_defined_functions(Array(String)) — Канонические имена исполняемых пользовательских функций, использованных при выполнении запроса.used_sql_user_defined_functions(Array(String)) — Канонические имена пользовательских функций SQL, использованных при выполнении запроса.used_row_policies(Array(String)) — Список имён политик строк, использованных при выполнении запроса.used_privileges(Array(String)) — Привилегии, успешно проверенные при выполнении запроса.missing_privileges(Array(String)) — Привилегии, отсутствующие при выполнении запроса.transaction_id(Tuple(UInt64, UInt64, UUID)) — Идентификатор транзакции, в рамках которой был выполнен этот запрос.query_cache_usage(Enum8('Unknown' = 0, 'None' = 1, 'Write' = 2, 'Read' = 3)) — Использование кэша запросов при выполнении запроса. Значения: 'Unknown' = статус неизвестен, 'None' = результат запроса не был ни записан в кэш результатов запросов, ни прочитан из него, 'Write' = результат запроса был записан в кэш результатов запросов, 'Read' = результат запроса был прочитан из кэша результатов запросов.asynchronous_read_counters(Map(String, UInt64)) — Метрики асинхронного чтения.is_internal(UInt8) — Указывает, является ли запрос вспомогательным и выполняется ли он внутри системы.
Псевдонимы:
ProfileEvents.Names— псевдоним дляmapKeys(ProfileEvents).ProfileEvents.Values— псевдоним дляmapValues(ProfileEvents).Settings.Names— псевдоним дляmapKeys(Settings).Settings.Values— псевдоним дляmapValues(Settings).
Пример
SELECT
query_start_time,
query_duration_ms,
query
FROM system.user_query_log
ORDER BY query_start_time DESC
LIMIT 10;