説明
現在のユーザー自身のクエリログレコードを表示します。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 を設定してテーブルを無効にしてください。
可用性
system.user_query_log は、query_log.enable_user_query_log サーバー設定が有効な場合 (これがデフォルトです) にのみアタッチされます。この設定が 0 の場合、テーブルは存在せず、そのテーブルに対するクエリは UNKNOWN_TABLE で失敗します。
query_log.enable_user_query_log が有効であっても、基盤となるクエリログが設定されていない場合、またはそのテーブルがまだ作成されていない場合、system.user_query_log は存在しますが空です。
定数と比較するクエリログのパーティションおよびキーカラム (event_date、event_time、query_start_time、query_id、type、および同様のスカラーカラム) に対する条件は、基盤となるクエリログテーブルにプッシュダウンされます。そのため、以下の例のような通常のルックアップではパーティションプルーニングが維持され、保持されているログ全体はスキャンされません。
このテーブルを提供する ClickHouse バージョンにアップグレードする前に、system.user_query_log という名前のテーブルが作成されていた場合、既存のテーブルをリネームまたは削除するか、query_log.enable_user_query_log を 0 に設定するまで、サーバーは起動しません。
カラム
hostname(String) — クエリを実行するサーバーのホスト名。clickhouse_version(String) — 行を生成した ClickHouse サーバーのバージョン。system_processor(String) — 行を生成した ClickHouse サーバーの CPU アーキテクチャ。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 値を送信し、クエリのサーバーイニシエーターが受信した値とローカルの値をすべて集計します。cache ボリュームはこの値に影響しません。read_bytes(UInt64) — クエリに関与するすべてのテーブルおよびテーブル関数から読み取られたバイト数の合計。通常のサブクエリ、IN および JOIN のサブクエリを含みます。分散クエリでは、read_bytes にはすべてのレプリカで読み取られた行の合計数が含まれます。各レプリカが自身の read_bytes 値を送信し、クエリのサーバーイニシエーターが受信した値とローカルの値をすべて集計します。cache ボリュームはこの値に影響しません。written_rows(UInt64) — クエリによって書き込まれた行数。アタッチされた materialized view など、パイプラインによってトリガーされる下流の挿入で書き込まれた行も含まれます。同期挿入の場合、これらの下流の行はquery_kind=Insertエントリに記録されます。非同期挿入の場合はquery_kind=AsyncInsertFlushエントリに記録され、クライアント向けのInsertエントリにはクライアントから受け入れた行のみが記録されます。行を書き込まないクエリの場合は 0 です。written_bytes(UInt64) — クエリによって書き込まれたバイト数 (非圧縮) 。アタッチされた materialized view など、パイプラインによってトリガーされる下流の挿入で書き込まれたバイトも含まれます。同期挿入の場合、これらの下流のバイトはquery_kind=Insertエントリに記録されます。非同期挿入の場合はquery_kind=AsyncInsertFlushエントリに記録され、クライアント向けのInsertエントリにはクライアントから受け入れたバイトのみが記録されます。データを書き込まないクエリの場合は 0 です。result_rows(UInt64) — SELECT クエリの結果に含まれる行数、または挿入によって書き込まれた行数。同期挿入の場合、query_kind=Insertエントリには、アタッチされた materialized view などパイプラインによってトリガーされる下流の挿入で書き込まれた行も含まれます。非同期挿入の場合、これらの下流の行はquery_kind=AsyncInsertFlushエントリに記録され、クライアント向けのInsertエントリにはクライアントから受け入れた行のみが記録されます。result_bytes(UInt64) — クエリ結果の保存に使用される RAM 容量 (バイト単位) 。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(Enum8(‘Unknown’ = 0, ‘TCP’ = 1, ‘HTTP’ = 2, ‘gRPC’ = 3, ‘MySQL’ = 4, ‘PostgreSQL’ = 5, ‘Local’ = 6, ‘TCP_Interserver’ = 7, ‘Prometheus’ = 8, ‘Background’ = 9, ‘ArrowFlight’ = 10)) — クライアントから報告された、クエリの開始元インターフェイス。報告されたインターフェイスがこのサーバーで認識できないものである場合はUnknownです。is_secure(UInt8) — クエリがセキュアなインターフェイス経由で実行されたかどうかを示すフラグos_user(String) — clickhouse-client を実行しているオペレーティングシステムのユーザー名。client_hostname(String) — clickhouse-client または別の TCP クライアントを実行しているクライアントマシンのホスト名。client_name(String) — clickhouse-client または別の TCP クライアントの名前。client_agent(String) — クライアントを呼び出した AI コーディングエージェント (例: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(Enum8(‘UNKNOWN’ = 0, ‘GET’ = 1, ‘POST’ = 2, ‘OPTIONS’ = 3, ‘PUT’ = 4, ‘DELETE’ = 5, ‘HEAD’ = 6)) — クエリを開始した HTTP メソッド。クエリが HTTP 経由で到達しなかった場合、または報告されたメソッドがこのサーバーで認識できないものである場合はUNKNOWNです。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 設定で指定された quota key (keyed を参照) 。distributed_depth(UInt64) — クエリがサーバー間で転送された回数。revision(UInt32) — ClickHouse のリビジョン。http_handler_name(String) — クエリを呼び出した SQL 定義の HTTP ハンドラー (CREATE HANDLER) の名前。このようなハンドラー経由でクエリが呼び出されなかった場合は空です。http_request_url(String) — クエリを呼び出した HTTP リクエストパス (クエリ文字列を除く) 。機密性の高いリクエストパラメータが永続化されないよう、クエリ文字列は省略されます。HTTP 以外のクエリでは空です。log_comment(String) — ログコメント。max_query_size 以下の任意の文字列に設定できます。定義されていない場合は空の文字列です。thread_ids(Array(UInt64)) — クエリ実行に参加したスレッド ID。これらのスレッドが同時に実行されたとは限りません。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)) — クエリ実行時に不足している権限。used_number_of_joins(UInt64) — このクエリで実行された物理的な結合の数。この値はパイプラインの構築時に収集されるため、クエリテキスト内の JOIN 句の数ではなく、すべての最適化を経た後に残った結合の数を表します。結合はネストの深さに関係なくカウントされます。サブクエリ、共通テーブル式、ビュー、ビューのビュー、および INSERT によってトリガーされる materialized view の SELECT は、いずれも送信されたクエリの行に集計されます。そのため、クエリ自体のテキストに JOIN が一切含まれていなくても、この値が 0 以外になることがあります。EXPLAIN PIPELINE のように、パイプラインを構築するだけで実行しないクエリでは、説明対象のクエリの結合数が報告されます。また、1 つのクエリの実行中に複数回組み立てられるパイプラインもあります。たとえば、materialized view の SELECT はそれをトリガーする INSERT のブロックごと、および挿入ストリームごとに組み立てられ、再帰 CTE の再帰メンバーは反復ごとに、ループのリレーションは再開されるたびに組み立て直されます。このようなパイプラインでも結合は 1 回だけカウントされるため、この数値はパイプラインが組み立てられた回数ではなく、クエリそのものの特性を表します。used_join_algorithms(Array(String)) — used_number_of_joins でカウントされた結合のアルゴリズム: ‘HASH’、‘PARALLEL_HASH’、‘GRACE_HASH’、‘PARTIAL_MERGE’、‘FULL_SORTING_MERGE’、‘PARALLEL_FULL_SORTING_MERGE’、‘IE_JOIN’、‘DIRECT’、‘PASTE’、‘CONSTANT’。ソートおよび重複排除されているため、複数の結合で共通するアルゴリズムは 1 回だけ現れます。これは各結合の実行に実際に選択されたアルゴリズムであり、join_algorithm 設定で許可されているアルゴリズムではありません。実行途中でアルゴリズムが別のものに切り替わることがあり、その場合は両方が報告されます。used_join_kinds(Array(String)) — used_number_of_joins でカウントされた結合の種類。結合ごとに 1 要素であるため、複数の結合で共通する種類は複数回現れます。要素は実行順ではなく、ソートされた順に並びます。各種類は実際に実行されたものであり、クエリテキストとは異なる場合があります。オプティマイザが結合の左右を入れ替えて実行し、その結果 LEFT が RIGHT に変わることがあるためです。used_join_strictness(Array(String)) — used_number_of_joins でカウントされた結合の strictness。結合ごとに 1 要素で、used_join_kinds と同じ順序です。つまり、両方の配列で同じインデックスの要素は同じ結合を表します。spilled_to_disk(Array(String)) — クエリ実行中にディスク上の一時ファイルにデータを書き込んだ (外部メモリでの処理) オペレーター。ソートおよび重複排除されています。空の配列は、クエリがすべてメモリ内で実行されたことを意味します。transaction_id(Tuple(UInt64, UInt64, UUID, Int64)) — このクエリが実行されたトランザクションの識別子。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)の別名。