Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Important
Esta tabla del sistema está en versión preliminar pública.
En este artículo se incluye información sobre la tabla del sistema del historial de consultas, incluido un esquema del esquema de la tabla.
Ruta de acceso de tabla: esta tabla del sistema se encuentra en system.query.history.
Uso de la tabla del historial de consultas
La tabla de historial de consultas incluye registros para las consultas que se ejecutan mediante almacenes SQL o proceso sin servidor para cuadernos y trabajos. La tabla incluye registros de toda la cuenta de todas las áreas de trabajo de la misma región desde la que se accede a la tabla.
De manera predeterminada, solo los administradores tienen acceso a la tabla del sistema. Si desea compartir los datos de la tabla con un usuario o grupo, Databricks recomienda crear una vista dinámica para cada usuario o grupo. Consulte Creación de una vista dinámica.
Esquema de la tabla del sistema del historial de consultas
La tabla del historial de consultas usa el esquema siguiente:
| Nombre de la columna | Tipo de dato | Description | Example |
|---|---|---|---|
account_id |
string | Id. de la cuenta. | 11e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
string | Id. del área de trabajo donde se ejecutó la consulta. | 1234567890123456 |
statement_id |
string | Id. que identifica de forma única la ejecución de la instrucción. Puede usar este identificador para buscar la ejecución de la instrucción en la interfaz de usuario del Historial de Consultas. | 7a99b43c-b46c-432b-b0a7-814217701909 |
session_id |
string | Id. de sesión de Spark. | 01234567-cr06-a2mp-t0nd-a14ecfb5a9c2 |
execution_status |
string | Estado de finalización de la instrucción. Los valores posibles son:
|
FINISHED |
compute |
struct | Estructura que representa el tipo de recurso de proceso usado para ejecutar la instrucción y el id. del recurso cuando corresponda. El valor type será WAREHOUSE o SERVERLESS_COMPUTE. |
{type: WAREHOUSE,cluster_id: NULL,warehouse_id: ec58ee3772e8d305} |
executed_by_user_id |
string | Id. del usuario que ejecutó la instrucción. | 2967555311742259 |
executed_by |
string | Dirección de correo electrónico o nombre del usuario que ejecutó la instrucción. | example@databricks.com |
statement_text |
string | Texto de la instrucción SQL. Si ha configurado claves administradas por el cliente, statement_text está vacío. Debido a las limitaciones de almacenamiento, se comprimen los valores de texto de declaraciones más largos. Incluso con la compresión, usted puede alcanzar un límite de caracteres. |
SELECT 1 |
statement_type |
string | Tipo de declaración. Por ejemplo, ALTER, COPY y INSERT. |
SELECT |
error_message |
string | Mensaje que describe la condición de error. Si ha configurado claves administradas por el cliente, error_message está vacío. |
[INSUFFICIENT_PERMISSIONS] Insufficient privileges: User does not have permission SELECT on table 'default.nyctaxi_trips'. |
client_application |
string | Aplicación cliente que ejecutó la instrucción. Por ejemplo: Editor de SQL de Databricks, Tableau y Power BI. Este campo se deriva de la información proporcionada por las aplicaciones cliente. Aunque se espera que los valores permanezcan estáticos con el tiempo, esto no se puede garantizar. | Databricks SQL Editor |
client_driver |
string | El conector utilizado para conectarse a Databricks y ejecutar la instrucción. Por ejemplo: Databricks SQL Driver for Go, Databricks ODBC Driver, Databricks JDBC Driver. | Databricks JDBC Driver |
cache_origin_statement_id |
string | Para los resultados de la consulta capturados de la memoria caché, este campo contiene el identificador de instrucción de la consulta que insertó originalmente el resultado en la memoria caché. Si el resultado de la consulta no se captura de la memoria caché, este campo contiene el identificador de instrucción propio de la consulta. | 01f034de-5e17-162d-a176-1f319b12707b |
total_duration_ms |
bigint | Tiempo total de ejecución de la instrucción en milisegundos (excepto el tiempo de captura de resultados). | 1 |
waiting_for_compute_duration_ms |
bigint | Tiempo de espera para el aprovisionamiento de recursos de cómputo, en milisegundos. | 1 |
waiting_at_capacity_duration_ms |
bigint | Tiempo dedicado a esperar en cola por la capacidad de proceso disponible, en milisegundos. | 1 |
execution_duration_ms |
bigint | Tiempo dedicado a ejecutar la instrucción, en milisegundos. | 1 |
compilation_duration_ms |
bigint | Tiempo dedicado a la carga de los metadatos y la optimización de la instrucción, en milisegundos. | 1 |
total_task_duration_ms |
bigint | Suma de todas las duraciones de tareas, en milisegundos. Representa el tiempo combinado necesario para ejecutar la consulta en todos los núcleos de todos los nodos. Puede ser significativamente mayor que la duración del reloj si se ejecutan varias tareas en paralelo. Puede ser menor que la duración del reloj si las tareas esperan por los nodos disponibles. | 1 |
result_fetch_duration_ms |
bigint | Tiempo dedicado, en milisegundos, a la captura de resultados de la instrucción una vez finalizada la ejecución. | 1 |
start_time |
timestamp | Hora a la que Databricks recibió la solicitud. La información de zona horaria se registra al final del valor con +00:00, que representa la hora UTC. |
2022-12-05T00:00:00.000+0000 |
end_time |
timestamp | Hora en que finalizó la ejecución de la instrucción, excluyendo el tiempo de captura de resultados. La información de zona horaria se registra al final del valor con +00:00, que representa la hora UTC. |
2022-12-05T00:00:00.000+00:00 |
update_time |
timestamp | Hora en que la declaración recibió una actualización de progreso por última vez. La información de zona horaria se registra al final del valor con +00:00, que representa la hora UTC. |
2022-12-05T00:00:00.000+00:00 |
read_partitions |
bigint | Número de particiones leídas después de la eliminación. | 1 |
pruned_files |
bigint | Número de archivos eliminados. | 1 |
read_files |
bigint | Número de archivos leídos después del recorte. | 1 |
read_rows |
bigint | Número total de filas leídas por la instrucción. | 1 |
produced_rows |
bigint | Número total de filas devueltas por la instrucción. | 1 |
read_bytes |
bigint | Tamaño total de datos leídos por la instrucción, en bytes. | 1 |
read_io_cache_percent |
int | El porcentaje de bytes de datos persistentes que se leen de la memoria caché de I/O. | 50 |
from_result_cache |
boolean |
TRUE indica que el resultado de la consulta se recuperó de la memoria caché. |
TRUE |
spilled_local_bytes |
bigint | Tamaño de los datos, en bytes, escritos temporalmente en el disco mientras se ejecuta la instrucción. | 1 |
written_bytes |
bigint | Tamaño de los datos persistentes, en bytes, escritos en el almacenamiento de objetos en la nube. | 1 |
written_rows |
bigint | Número de filas de datos persistentes escritos en el almacenamiento de objetos en la nube. | 1 |
written_files |
bigint | Número de archivos de datos persistentes escritos en el almacenamiento de objetos en la nube. | 1 |
shuffle_read_bytes |
bigint | Cantidad total de los datos, en bytes, enviados a través de la red. | 1 |
query_source |
struct | Estructura que contiene pares clave-valor que representan entidades de Databricks implicadas en la ejecución de esta instrucción, como trabajos, cuadernos o paneles. Este campo solo registra entidades de 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} |
query_parameters |
struct | Una estructura que contiene parámetros nombrados y posicionales utilizados en consultas parametrizadas. Los parámetros con nombre se representan como pares clave-valor que asignan nombres de parámetro a valores. Los parámetros posicionales se representan como una lista donde el índice indica la posición del parámetro. Solo un tipo (denominado o posicional) puede estar presente a la vez. | {named_parameters: { "param-1": 1, "param-2": "hello"},pos_parameters: null,is_truncated: false} |
executed_as |
string | Nombre del usuario o entidad de servicio cuyo privilegio se usó para ejecutar la instrucción. | example@databricks.com |
executed_as_user_id |
string | Identificador del usuario o principal de servicio cuyo privilegio se usó para ejecutar el comando. | 2967555311742259 |
Visualización del perfil de consulta de un registro
Para ir al perfil de consulta de una consulta en función de un registro de la tabla del historial de consultas, haga lo siguiente:
- Identifique el registro de interés y, a continuación, copie el
statement_iddel registro. - Consulte el identificador del registro
workspace_idpara asegurarse de que ha iniciado sesión en el mismo entorno de trabajo que el registro. - Haga clic en
Historial de consultas en la barra lateral del área de trabajo.
- En el campo Id. de instrucción, pegue el
statement_iden el registro. - Haga clic en el nombre de una consulta. Aparece información general de las métricas de consulta.
- Haga clic en Ver perfil de consulta.
Comprender la columna query_source
La query_source columna contiene un conjunto de identificadores únicos de las entidades de Azure Databricks implicadas en la ejecución de la instrucción.
Si la query_source columna contiene varios identificadores, significa que la ejecución de la instrucción se desencadenó mediante varias entidades. Por ejemplo, un resultado de trabajo puede desencadenar una alerta que llama a una consulta SQL. En este ejemplo, los tres identificadores se rellenarán dentro de query_source. Los valores de esta columna no se ordenan por orden de ejecución.
Los posibles orígenes de consulta son:
- alert_id: instrucción activada desde una alerta
- sql_query_id: instrucción ejecutada desde esta sesión del editor de SQL
- dashboard_id: instrucción ejecutada desde un panel
- legacy_dashboard_id: instrucción ejecutada desde un panel heredado
- genie_space_id: instrucción ejecutada desde un espacio de Genie
- notebook_id: instrucción ejecutada desde un cuaderno
- job_info.job_id: instrucción ejecutada dentro de un trabajo
- job_info.job_run_id: instrucción ejecutada desde una ejecución de trabajo
- job_info.job_task_run_id: instrucción ejecutada dentro de una ejecución de tarea de trabajo
Combinaciones válidas de query_source
En los ejemplos siguientes se muestra cómo se rellena la query_source columna en función de cómo se ejecuta la consulta:
Las consultas ejecutadas durante una ejecución de trabajo incluyen una estructura rellenada
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}Las consultas de los paneles heredados incluyen un
sql_query_idy unlegacy_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}Las consultas de alertas incluyen un
sql_query_idy unalert_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}Las consultas de los paneles incluyen
dashboard_id, pero nojob_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}
Materialización del historial de consultas desde el metastore
El código siguiente se puede usar para crear un trabajo que se ejecuta cada hora, diariamente, o semanalmente para materializar el historial de consultas desde un metastore. Ajuste las variables HISTORY_TABLE_PATH y LOOKUP_PERIOD_DAYS en consecuencia.
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()
Análisis de la popularidad de las tablas, incluidas las consultas almacenadas en caché
La tabla del sistema de linaje de tablas no emite entradas para los resultados de la consulta de la caché de resultados. Por este motivo, debe combinar la tabla del historial de consultas con la tabla del sistema de linaje de tablas para incluir consultas almacenadas en caché en el análisis.
Por ejemplo, la consulta siguiente recupera tablas con consultas que superan una hora de tiempo de ejecución en los últimos 7 días:
SELECT
t.source_table_full_name,
COUNT(*) AS num_of_queries_over_hour
FROM
system.query.history h
INNER JOIN system.access.table_lineage t
ON t.statement_id = h.cache_origin_statement_id
WHERE
h.total_duration_ms > 3600000
AND t.event_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
AND t.source_table_full_name IS NOT NULL
GROUP BY t.source_table_full_name
ORDER BY 2 DESC;