Condividi tramite


Tabella di sistema di riferimento della cronologia delle query

Importante

Questa tabella di sistema è disponibile in versione di anteprima pubblica. Per accedere alla tabella, lo schema deve essere abilitato nel catalogo system. Per ulteriori informazioni, consultare Abilitare gli schemi delle tabelle di sistema.

Questo articolo include informazioni sulla tabella di sistema della cronologia query, inclusa una descrizione dello schema della tabella.

Importante

Per accedere alla tabella di sistema della cronologia delle query, è necessario abilitare lo schema query. Per istruzioni sull'abilitazione degli schemi di sistema, vedere Abilitare gli schemi di tabella di sistema.

percorso tabella: questa tabella di sistema si trova in system.query.history.

Uso della tabella cronologia query

La tabella della cronologia delle query include i record per le query eseguite utilizzando SQL Warehouses o Serverless Compute per i notebook e i processi . La tabella include record globali dell'account di tutti gli spazi di lavoro nella stessa regione da cui si accede alla tabella.

Per impostazione predefinita, solo gli amministratori hanno accesso alla tabella di sistema. Se si desidera condividere i dati della tabella con un utente o un gruppo, Databricks consiglia di creare una visualizzazione dinamica per ogni utente o gruppo. Vedere Creare una visualizzazione dinamica.

Schema della cronologia delle query nella tabella di sistema

La tabella della cronologia delle query utilizza la seguente struttura:

Nome colonna Tipo di dati Descrizione Esempio
account_id string ID dell'account. 11e22ba4-87b9-4cc2

-9770-d10b894b7118
workspace_id string ID dell'area di lavoro in cui è stata eseguita la query. 1234567890123456
statement_id string ID che identifica in modo univoco l'esecuzione dell'istruzione. È possibile usare questo ID per trovare l'esecuzione dell'istruzione nell'interfaccia utente della cronologia query. 7a99b43c-b46c-432b

-b0a7-814217701909
session_id string ID sessione Spark. 01234567-cr06-a2mp

-t0nd-a14ecfb5a9c2
execution_status string Stato di terminazione dell’istruzione. I valori possibili sono:

- FINISHED: Esecuzione completata correttamente
- FAILED: l'esecuzione non è riuscita con il motivo dell'errore descritto nel messaggio di errore associato
- CANCELED: L'esecuzione del processo è stata annullata
FINISHED
compute struct Una struct che rappresenta il tipo di risorsa di calcolo utilizzata per eseguire il statement e l'ID della risorsa, dove applicabile. Il valore type sarà WAREHOUSE o SERVERLESS_COMPUTE. {

type: WAREHOUSE,

cluster_id: NULL,

warehouse_id: ec58ee3772e8d305

}
executed_by_user_id string ID dell'utente che ha eseguito l'istruzione. 2967555311742259
executed_by string Indirizzo di posta elettronica o nome utente dell'utente che ha eseguito l'istruzione. example@databricks.com
statement_text string Testo dell'istruzione SQL. Se sono state configurate chiavi gestite dal cliente, statement_text è vuoto. SELECT 1
statement_type string Tipo di istruzione. Ad esempio, ALTER, COPY e INSERT. SELECT
error_message string Messaggio che descrive la condizione di errore. Se sono state configurate chiavi gestite dal cliente, error_message è vuoto. [INSUFFICIENT_PERMISSIONS]

Insufficient privileges:

User does not have

permission SELECT on table

'default.nyctaxi_trips'.
client_application string Applicazione client che ha eseguito l'istruzione . Ad esempio: Editor SQL di Databricks, Tableau e Power BI. Questo campo è derivato dalle informazioni fornite dalle applicazioni client. Sebbene i valori rimangano statici nel corso del tempo, questo non può essere garantito. Databricks SQL Editor
client_driver string Connettore usato per connettersi ad Azure Databricks per eseguire l'istruzione . Ad esempio: Driver SQL di Databricks per Go, driver ODBC di Databricks, driver JDBC di Databricks. Databricks JDBC Driver
total_duration_ms bigint Tempo di esecuzione totale dell'istruzione in millisecondi ( escluso il tempo di recupero dei risultati ). 1
waiting_for_compute_duration_ms bigint Tempo impiegato in attesa del provisioning delle risorse di calcolo in millisecondi. 1
waiting_at_capacity_duration_ms bigint Tempo impiegato in attesa in coda per la capacità di calcolo disponibile in millisecondi. 1
execution_duration_ms bigint Tempo impiegato per l'esecuzione dell'istruzione in millisecondi. 1
compilation_duration_ms bigint Tempo impiegato per caricare i metadati e ottimizzare l'istruzione in millisecondi. 1
total_task_duration_ms bigint Somma di tutte le durate dell'attività in millisecondi. Questo tempo rappresenta il tempo combinato impiegato per eseguire la query in tutti i core di tutti i nodi. Può essere significativamente più lungo della durata del tempo a muro se più attività vengono eseguite in parallelo. Può essere più breve della durata del tempo in tempo reale se le attività attendono i nodi disponibili. 1
result_fetch_duration_ms bigint Tempo trascorso, in millisecondi, durante il recupero dei risultati dell'istruzione al termine dell'esecuzione. 1
start_time timestamp Ora in cui Databricks ha ricevuto la richiesta. Le informazioni sul fuso orario vengono registrate alla fine del valore con +00:00 che rappresenta l'ora UTC. 2022-12-05T00:00:00.000+0000
end_time timestamp Ora di fine dell'esecuzione dell'istruzione, escluso il tempo di recupero dei risultati. Le informazioni sul fuso orario vengono registrate alla fine del valore con +00:00 che rappresenta l'ora UTC. 2022-12-05T00:00:00.000+00:00
update_time timestamp Ora dell'ultimo aggiornamento del resoconto. Le informazioni sul fuso orario vengono registrate alla fine del valore con +00:00 che rappresenta l'ora UTC. 2022-12-05T00:00:00.000+00:00
read_partitions bigint Numero di partizioni lette dopo l'eliminazione. 1
pruned_files bigint Numero di file eliminati. 1
read_files bigint Numero di file letti dopo l'eliminazione. 1
read_rows bigint Numero totale di righe lette dall'istruzione. 1
produced_rows bigint Numero totale di righe restituite dall'istruzione. 1
read_bytes bigint Dimensioni totali dei dati letti dall'istruzione in byte. 1
read_io_cache_percent int Percentuale di byte di dati persistenti letti dalla cache di I/O. 50
from_result_cache boolean TRUE indica che il risultato dell'istruzione è stato recuperato dalla cache. TRUE
spilled_local_bytes bigint Dimensioni dei dati, in byte, scritte temporaneamente su disco durante l'esecuzione dell'istruzione. 1
written_bytes bigint Dimensioni in byte di dati persistenti scritti nell'archiviazione di oggetti cloud. 1
shuffle_read_bytes bigint Quantità totale di dati in byte inviati in rete. 1
query_source struct Struct che contiene coppie chiave-valore che rappresentano una o più entità Databricks coinvolte nell'esecuzione di questa istruzione, ad esempio processi, notebook o dashboard. Questo campo registra solo le entità di Databricks. {
job_info: {
job_id: 64361233243479
job_run_id: 887406461287882
job_task_key: “job_task_1”
job_task_run_id: 110378410199121
}
executed_as string Nome dell'utente o dell'entità servizio il cui privilegio è stato usato per eseguire l'istruzione. example@databricks.com
executed_as_user_id string ID dell'utente o dell'entità servizio il cui privilegio è stato usato per eseguire l'istruzione. 2967555311742259

Visualizzare il profilo di query per un record

Per accedere al profilo di una query basato su un record nella tabella della cronologia delle query, eseguire le operazioni seguenti:

  1. Identificare il record di interesse, quindi copiare il record di statement_id.
  2. Fare riferimento al workspace_id del record per assicurarsi di aver eseguito l'accesso alla stessa area di lavoro del record.
  3. Fare clic su Icona CronologiaCronologia query nella barra laterale dell'area di lavoro.
  4. Nel campo ID istruzione incollare l'oggetto statement_id sul record.
  5. Fare clic sul nome di una query. Viene visualizzata una panoramica delle metriche di query.
  6. Fare clic su Vedere profilo delle query.

Materializzare la cronologia delle query dal metastore

Il codice seguente può essere usato per creare un job programmato su base oraria, giornaliera o settimanale per materializzare la cronologia delle query da un metastore. Regolare di conseguenza le variabili HISTORY_TABLE_PATH e 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()