次の方法で共有


クエリ履歴システム テーブル リファレンス

重要

このシステム テーブルは パブリック プレビュー にあります。

この記事には、テーブルのスキーマの概要など、クエリ履歴システム テーブルに関する情報が含まれています。

テーブル パス: このシステム テーブルは、 system.query.historyにあります。

クエリ履歴テーブルの使用

クエリ履歴テーブルには、ノートブックジョブ用の SQL ウェアハウスまたはサーバーレス コンピューティングを使用して実行されるクエリのレコードが含まれています。 テーブルには、テーブルへのアクセス元である同じリージョン内のすべてのワークスペースのアカウント全体のレコードが含まれています。

既定では、管理者のみがシステム テーブルにアクセスできます。 テーブルのデータをユーザーまたはグループと共有する場合、Databricks では、ユーザーまたはグループごとに動的ビューを作成することをお勧めします。 「動的ビューを作成する」を参照してください。

クエリ履歴システム テーブル スキーマ

クエリ履歴テーブルでは、次のスキーマを使用します。

列名 データ型 説明
account_id ひも アカウントの ID。 11e22ba4-87b9-4cc2
-9770-d10b894b7118
workspace_id ひも クエリが実行されたワークスペースの ID。 1234567890123456
statement_id ひも ステートメントの実行を一意に識別する ID。 この ID を使用して、Query History UI でステートメントの実行を見つけることができます。 7a99b43c-b46c-432b
-b0a7-814217701909
session_id ひも Spark セッション ID。 01234567-cr06-a2mp
-t0nd-a14ecfb5a9c2
execution_status ひも ステートメントの終了状態。 次のいずれかの値になります。
- FINISHED: 実行が成功しました
- FAILED: 付随するエラー メッセージで説明されているエラーにより実行に失敗しました
- CANCELED: 実行が取り消されました
FINISHED
compute 構造体 ステートメントの実行に使用されたコンピューティング リソースの種類と、該当する場合はリソースの ID を表す構造体。 type 値は WAREHOUSE または SERVERLESS_COMPUTE のどちらかになります。 {
type: WAREHOUSE,
cluster_id: NULL,
warehouse_id: ec58ee3772e8d305
}
executed_by_user_id ひも ステートメントを実行したユーザーの ID。 2967555311742259
executed_by ひも ステートメントを実行したユーザーのメール アドレスまたはユーザー名。 example@databricks.com
statement_text ひも SQL ステートメントのテキスト。 カスタマー マネージド キーを構成した場合、statement_text は空です。 ストレージの制限により、長いステートメント テキスト値が圧縮されます。 圧縮しても、文字の制限に達する可能性があります。 SELECT 1
statement_type ひも ステートメントの種類。 たとえば、ALTERCOPYINSERT のようにします。 SELECT
error_message ひも エラー状態を説明するメッセージ。 カスタマー マネージド キーを構成した場合、error_message は空です。 [INSUFFICIENT_PERMISSIONS]
Insufficient privileges:
User does not have
permission SELECT on table
'default.nyctaxi_trips'.
client_application ひも ステートメントを実行したクライアント アプリケーション。 たとえば、Databricks SQL エディター、Tableau、Power BI などです。 このフィールドは、クライアント アプリケーションによって提供される情報から派生します。 値は時間の経過と同時に静的なままであることが予想されますが、これは保証できません。 Databricks SQL Editor
client_driver ひも ステートメントを実行するために Databricks に接続するために使用されるコネクタ。 例: Databricks SQL Driver for Go、Databricks ODBC Driver、Databricks JDBC Driver。 Databricks JDBC Driver
total_duration_ms bigint(ビッグイント) ステートメントの合計実行時間 (ミリ秒、結果のフェッチ時間を除く)。 1
waiting_for_compute_duration_ms bigint(ビッグイント) コンピューティング リソースのプロビジョニングを待機するために費やされた時間 (ミリ秒単位)。 1
waiting_at_capacity_duration_ms bigint(ビッグイント) 使用可能なコンピューティング容量をキューで待機するために費やされた時間 (ミリ秒単位)。 1
execution_duration_ms bigint(ビッグイント) ステートメントの実行に費やされた時間 (ミリ秒単位)。 1
compilation_duration_ms bigint(ビッグイント) メタデータの読み込みとステートメントの最適化に費やされた時間 (ミリ秒単位)。 1
total_task_duration_ms bigint(ビッグイント) すべてのタスク期間の合計 (ミリ秒単位)。 この時間は、すべてのノードのすべてのコアでクエリの実行にかかった合計時間を表します。 複数のタスクが並列で実行される場合は、実時間よりも大幅に長い値である可能性があります。 タスクが使用可能なノードを待機する場合は、実時間よりも短い値である可能性があります。 1
result_fetch_duration_ms bigint(ビッグイント) 実行が完了した後にステートメントの結果をフェッチするのに費やされた時間 (ミリ秒単位)。 1
start_time タイムスタンプ(時刻印) Databricks が要求を受信した時刻。 タイムゾーン情報は、UTC を表す +00:00 という形式で値の末尾に記録されます。 2022-12-05T00:00:00.000+0000
end_time タイムスタンプ(時刻印) ステートメントの実行が終了した時刻 (結果のフェッチ時間を除く)。 タイムゾーン情報は、UTC を表す +00:00 という形式で値の末尾に記録されます。 2022-12-05T00:00:00.000+00:00
update_time タイムスタンプ(時刻印) ステートメントが最後に進行状況の更新を受信した時刻。 タイムゾーン情報は、UTC を表す +00:00 という形式で値の末尾に記録されます。 2022-12-05T00:00:00.000+00:00
read_partitions bigint(ビッグイント) 排除後に読み取られたパーティションの数。 1
pruned_files bigint(ビッグイント) 排除されたファイルの数。 1
read_files bigint(ビッグイント) 排除後に読み取られたファイルの数。 1
read_rows bigint(ビッグイント) ステートメントによって読み取られた行の合計数。 1
produced_rows bigint(ビッグイント) ステートメントによって返された行の合計数。 1
read_bytes bigint(ビッグイント) ステートメントによって読み取られたデータの合計サイズ (バイト単位)。 1
read_io_cache_percent 整数 (int) IO キャッシュから読み取られた永続データのバイト数の割合。 50
from_result_cache ブーリアン TRUE は、ステートメントの結果がキャッシュからフェッチされたことを示します。 TRUE
spilled_local_bytes bigint(ビッグイント) ステートメントの実行中にディスクに一時的に書き込まれたデータのサイズ (バイト単位)。 1
written_bytes bigint(ビッグイント) クラウド オブジェクト ストレージに書き込まれた永続データのサイズ (バイト単位)。 1
shuffle_read_bytes bigint(ビッグイント) ネットワーク経由で送信されたデータの合計量 (バイト単位)。 1
query_source 構造体 ジョブ、ノートブック、ダッシュボードなど、このステートメントの実行に関連した Databricks エンティティを表すキーと値のペアを含む構造体。 このフィールドは、Databricks エンティティのみを記録します。 {
alert_id: 81191d77-184f-4c4e-9998-b6a4b5f4cef1,
sql_query_id: null,
dashboard_id: null,
notebook_id: null,
job_info: {
job_id: 12781233243479,
job_run_id: null,
job_task_run_id: 110373910199121
},
legacy_dashboard_id: null,
genie_space_id: null
}
executed_as ひも ステートメントの実行に使用された権限を持つユーザーまたはサービス プリンシパルの名前。 example@databricks.com
executed_as_user_id ひも ステートメントの実行に使用された権限を持つユーザーまたはサービス プリンシパルの ID。 2967555311742259

レコードのクエリ プロファイルを表示する

クエリ履歴テーブルのレコードに基づいてクエリのクエリ プロファイルに移動するには、次の操作を行います。

  1. 目的のレコードを特定し、レコードの statement_idをコピーします。
  2. レコードの workspace_id を参照して、レコードと同じワークスペースにログインしていることを確認します。
  3. [履歴] アイコンをクリックします。ワークスペースサイドバーのクエリ履歴
  4. [ステートメント ID] フィールドに、レコードの statement_id を貼り付けます。
  5. クエリの名前をクリックします。 クエリ メトリックの概要が表示されます。
  6. [See query profile] (クエリ プロファイルの表示) をクリックします。

query_source列の理解

query_source列には、ステートメントの実行に関与する Azure Databricks エンティティの一意の識別子を含むセットが含まれています。

query_source列に複数の ID が含まれている場合は、ステートメントの実行が複数のエンティティによってトリガーされたことを意味します。 たとえば、ジョブの結果によって、SQL クエリを呼び出すアラートがトリガーされる場合があります。 この例では、3 つの ID はすべて query_source内に設定されます。 この列の値は、実行順序で並べ替えされません。

可能なクエリ ソースは次のとおりです。

query_sourceの有効な組み合わせ

次の例は、クエリの実行方法に応じて query_source 列がどのように設定されるかを示しています。

  • ジョブの実行中に実行されるクエリには、入力された job_info 構造体が含まれます。

    {
    alert_id: null,
    sql_query_id: null,
    dashboard_id: null,
    notebook_id: null,
    job_info: {
    job_id: 64361233243479,
    job_run_id: null,
    job_task_run_id: 110378410199121
    },
    legacy_dashboard_id: null,
    genie_space_id: null
    }

  • 従来のダッシュボードからのクエリには、 sql_query_idlegacy_dashboard_idが含まれます。

    {
    alert_id: null,
    sql_query_id: 7336ab80-1a3d-46d4-9c79-e27c45ce9a15,
    dashboard_id: null,
    notebook_id: null,
    job_info: null,
    legacy_dashboard_id: 1a735c96-4e9c-4370-8cd7-5814295d534c,
    genie_space_id: null
    }

  • アラートからのクエリには、 sql_query_idalert_idが含まれます。

    {
    alert_id: e906c0c6-2bcc-473a-a5d7-f18b2aee6e34,
    sql_query_id: 7336ab80-1a3d-46d4-9c79-e27c45ce9a15,
    dashboard_id: null,
    notebook_id: null,
    job_info: null,
    legacy_dashboard_id: null,
    genie_space_id: null
    }

  • ダッシュボードからのクエリには dashboard_idが含まれますが、 job_infoはありません。

    {
    alert_id: null,
    sql_query_id: null,
    dashboard_id: 887406461287882,
    notebook_id: null,
    job_info: null,
    legacy_dashboard_id: null,
    genie_space_id: null
    }

メタストアからクエリ履歴を具体化する

次のコードを使用すると、時間単位、日単位、週単位で実行されるジョブを作成して、メタストアからクエリ履歴を具体化できます。 HISTORY_TABLE_PATH 変数と LOOKUP_PERIOD_DAYS 変数は、適宜調整します。

from delta.tables import *
from pyspark.sql.functions import *
from pyspark.sql.types import *

HISTORY_TABLE_PATH = "jacek.default.history"
# Adjust the lookup period according to your job schedule
LOOKUP_PERIOD_DAYS = 1

def table_exists(table_name):
    try:
        spark.sql(f"describe table {table_name}")
        return True
    except Exception:
        return False

def save_as_table(table_path, df, schema, pk_columns):
    deltaTable = (
        DeltaTable.createIfNotExists(spark)
        .tableName(table_path)
        .addColumns(schema)
        .execute()
    )

    merge_statement = " AND ".join([f"logs.{col}=newLogs.{col}" for col in pk_columns])

    result = (
        deltaTable.alias("logs")
        .merge(
            df.alias("newLogs"),
            f"{merge_statement}",
        )
        .whenNotMatchedInsertAll()
        .whenMatchedUpdateAll()
        .execute()
    )
    result.show()

def main():
    df = spark.read.table("system.query.history")
    if table_exists(HISTORY_TABLE_PATH):
        df = df.filter(f"update_time >= CURRENT_DATE() - INTERVAL {LOOKUP_PERIOD_DAYS} days")
    else:
        print(f"Table {HISTORY_TABLE_PATH} does not exist. Proceeding to copy the whole source table.")

    save_as_table(
        HISTORY_TABLE_PATH,
        df,
        df.schema,
        ["workspace_id", "statement_id"]
    )

main()