Dela via


Frågehistoriksystem table referens

Viktigt!

Det här systemet table finns i offentlig förhandsversion. Om du vill komma åt tablemåste schema aktiveras i din systemcatalog. Mer information finns i Aktivera systemscheman table.

Den här artikeln innehåller information om frågehistoriksystemet table, inklusive en översikt över tableschema.

Viktigt!

Om du vill komma åt frågehistoriksystemet tablemåste du aktivera queryschema. Anvisningar om hur du aktiverar systemscheman finns i Aktivera systemscheman table.

Table sökväg: Det här systemet table finns på system.query.history.

Använda frågehistoriken table

Frågehistoriken table innehåller poster för varje SQL-instruktion som körs med hjälp av SQL-lager. table innehåller kontoomfattande poster från alla arbetsytor i samma region som du har åtkomst till table.

Som standard har endast administratörer åtkomst till systemet table. Om du vill dela tabledata med en användare eller grupp rekommenderar Databricks att du skapar en dynamisk vy för varje användare eller grupp. Se Skapa en dynamisk vy.

System för frågehistorik tableschema

Frågehistoriken table använder följande schema:

Column namn Datatyp beskrivning Exempel
account_id sträng ID för kontot. 11e22ba4-87b9-4cc2

-9770-d10b894b7118
workspace_id sträng ID för arbetsytan where där frågan kördes. 1234567890123456
statement_id sträng Det ID som unikt identifierar körningen av -instruktionen. Du kan använda det här ID:t för att hitta instruktionskörningen i användargränssnittet för frågehistorik . 7a99b43c-b46c-432b

-b0a7-814217701909
session_id sträng Spark-sessions-ID. 01234567-cr06-a2mp

-t0nd-a14ecfb5a9c2
execution_status sträng Instruktionens avslutningstillstånd. Möjliga values är:

- FINISHED: körningen lyckades
- FAILED: körningen misslyckades med orsaken till felet som beskrivs i det medföljande felmeddelandet
- CANCELED: körningen avbröts
FINISHED
compute Struct En struct som representerar typen av beräkningsresurs som används för att köra instruktionen och ID:t för resursen where som är tillämpligt. Värdet type blir antingen WAREHOUSE eller SERVERLESS_COMPUTE. {

type: WAREHOUSE,

cluster_id: NULL,

warehouse_id: ec58ee3772e8d305

}
executed_by_user_id sträng ID:t för användaren som körde -instruktionen. 2967555311742259
executed_by sträng E-postadressen eller användarnamnet för användaren som körde -instruktionen. example@databricks.com
statement_text sträng Text för SQL-instruktionen. Om du har konfigurerat kundhanterade nycklar statement_text är det tomt. SELECT 1
statement_type sträng Instruktionstypen. Till exempel: ALTER, COPYochINSERT. SELECT
error_message sträng Meddelande som beskriver feltillståndet. Om du har konfigurerat kundhanterade nycklar error_message är det tomt. [INSUFFICIENT_PERMISSIONS]

Insufficient privileges:

User does not have

permission SELECT on table

'default.nyctaxi_trips'.
client_application sträng Klientprogram som körde -instruktionen. Till exempel: Databricks SQL Editor, Tableau och Power BI. Det här fältet härleds från information som tillhandahålls av klientprogram. Även om values förväntas förbli statiska över tid kan detta inte garanteras. Databricks SQL Editor
client_driver sträng Anslutningsappen som används för att ansluta till Azure Databricks för att köra -instruktionen. Till exempel: Databricks SQL Driver for Go, Databricks ODBC Driver, Databricks JDBC Driver. Databricks JDBC Driver
total_duration_ms bigint Total körningstid för -instruktionen i millisekunder ( exklusive resultathämtningstid ). 1
waiting_for_compute_duration_ms bigint Tid som ägnas åt att vänta på att beräkningsresurser ska etableras i millisekunder. 1
waiting_at_capacity_duration_ms bigint Tid i kö för tillgänglig beräkningskapacitet i millisekunder. 1
execution_duration_ms bigint Tid som ägnas åt att köra -instruktionen i millisekunder. 1
compilation_duration_ms bigint Tid som ägnas åt att läsa in metadata och optimera -instruktionen i millisekunder. 1
total_task_duration_ms bigint Summan av alla varaktigheter för aktiviteter i millisekunder. Den här gången representerar den kombinerade tid det tog att köra frågan över alla kärnor i alla noder. Det kan vara betydligt längre än varaktigheten för väggklockan om flera uppgifter körs parallellt. Den kan vara kortare än varaktigheten för väggklockan om aktiviteter väntar på tillgängliga noder. 1
result_fetch_duration_ms bigint Tid i millisekunder som hämtar instruktionsresultatet när körningen har slutförts. 1
start_time timestamp Tiden då Databricks tog emot begäran. Timezone information registreras i slutet av värdet med +00:00 som representerar UTC. 2022-12-05T00:00:00.000+0000
end_time timestamp Den tid då instruktionens körning avslutades, exklusive resultathämtningstid. Timezone-information registreras vid slutet av värdet, där +00:00 representerar UTC. 2022-12-05T00:00:00.000+00:00
update_time timestamp Den tid då uttalandet senast tog emot framsteg update. Timezone-information registreras i slutet av värdet, där +00:00 representerar UTC-tid. 2022-12-05T00:00:00.000+00:00
read_partitions bigint Antalet partitioner som lästs efter beskärning. 1
pruned_files bigint Antalet beskärde filer. 1
read_files bigint Antalet filer som lästs efter beskärning. 1
read_rows bigint Totalt antal rader som lästs av -instruktionen. 1
produced_rows bigint Totalt antal rader som returneras av -instruktionen. 1
read_bytes bigint Total storlek på data som lästs av instruktionen i byte. 1
read_io_cache_percent heltal Procentandelen byte av beständiga data som lästs från I/O-cachen. 50
from_result_cache boolean TRUE anger att instruktionsresultatet hämtades från cacheminnet. TRUE
spilled_local_bytes bigint Storleken på data, i byte, skrivs tillfälligt till disk när instruktionen körs. 1
written_bytes bigint Storleken i byte av beständiga data som skrivits till molnobjektlagring. 1
shuffle_read_bytes bigint Den totala mängden data i byte som skickas via nätverket. 1
query_source Struct En struct som innehåller nyckel/värde-par som representerar en eller flera Databricks-entiteter som var inblandade i körningen av den här instruktionen, till exempel jobb, notebook-filer eller instrumentpaneler. Det här fältet registrerar endast Databricks-entiteter. {
job_info: {
job_id: 64361233243479
job_run_id: 887406461287882
job_task_key: “job_task_1”
job_task_run_id: 110378410199121
}
executed_as sträng Namnet på användaren eller tjänstens huvudnamn vars behörighet användes för att köra -instruktionen. example@databricks.com
executed_as_user_id sträng ID:t för användaren eller tjänstens huvudnamn vars behörighet användes för att köra -instruktionen. 2967555311742259

Visa frågeprofilen för en post

Om du vill navigera till en frågas frågeprofil baserat på en post i frågehistoriken tablegör du följande:

  1. Identifiera intresseposten och kopiera sedan postens statement_id.
  2. Referera till postens workspace_id för att se till att du är inloggad på samma arbetsyta som posten.
  3. Klicka på HistorikikonFrågehistorik i arbetsytans sidofält.
  4. I fältet Instruktions-ID klistrar du in på statement_id posten.
  5. Klicka på namnet på en fråga. En översikt över frågemått visas.
  6. Klicka på Se frågeprofil.

Materialisera frågehistoriken från metaarkivet

Följande kod kan användas för att skapa ett jobb som körs varje timme, varje dag eller varje vecka för att materialisera frågehistoriken från ett metaarkiv. Justera variablerna HISTORY_TABLE_PATH och LOOKUP_PERIOD_DAYS därefter.

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()