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:
- Identificare il record di interesse, quindi copiare il record di
statement_id
. - Fare riferimento al
workspace_id
del record per assicurarsi di aver eseguito l'accesso alla stessa area di lavoro del record. - Fare clic su Cronologia query nella barra laterale dell'area di lavoro.
- Nel campo ID istruzione incollare l'oggetto
statement_id
sul record. - Fare clic sul nome di una query. Viene visualizzata una panoramica delle metriche di query.
- 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()