Compartilhar via


Referência da tabela do sistema de histórico de consultas

Importante

Esta tabela do sistema está em Visualização Pública. Para acessar a tabela, o esquema deve estar habilitado em seu catálogo system. Para obter mais informações, consulte Habilitar esquemas da tabela do sistema.

Este artigo inclui informações sobre a tabela do sistema de histórico de consultas, incluindo uma estrutura de tópicos do esquema da tabela.

Importante

Para acessar a tabela do sistema de histórico de consultas, você deve habilitar o esquema query. Para obter instruções sobre como habilitar esquemas do sistema, consulte Habilitar esquemas de tabela do sistema.

Caminho da tabela: Esta tabela do sistema está localizada em system.query.history.

Como usar a tabela de histórico de consultas

A tabela de histórico de consultas inclui registros para consultas executadas usando warehouses de SQL ou computação sem servidor para notebooks e trabalhos. A tabela inclui registros de toda a conta de todos os workspaces na mesma região da qual você acessa a tabela.

Por padrão, somente os administradores têm acesso à tabela do sistema. Se você quiser compartilhar os dados da tabela com um usuário ou grupo, o Databricks recomenda criar uma exibição dinâmica para cada usuário ou grupo. Confira Criar uma exibição dinâmica.

Esquema de tabela do sistema de histórico de consultas

A tabela de histórico de consultas usa o seguinte esquema:

Nome da coluna Tipo de dados Descrição Exemplo
account_id string ID da conta. 11e22ba4-87b9-4cc2

-9770-d10b894b7118
workspace_id string A ID do workspace em que a consulta foi executada. 1234567890123456
statement_id string A ID que identifica exclusivamente a execução da instrução. Você pode usar essa ID para localizar a execução da instrução na interface do usuário do Histórico de Consultas. 7a99b43c-b46c-432b

-b0a7-814217701909
session_id string A ID da sessão do Spark. 01234567-cr06-a2mp

-t0nd-a14ecfb5a9c2
execution_status string O estado de encerramento da instrução. Os valores possíveis são:

- FINISHED: execução foi concluída com êxito
- FAILED: falha na execução com o motivo da falha descrita na mensagem de erro que acompanha
- CANCELED: a execução da consulta foi cancelada
FINISHED
compute struct Um struct que representa o tipo de recurso de computação usado para executar a instrução e a ID do recurso, quando aplicável. O valor de type será WAREHOUSE ou SERVERLESS_COMPUTE. {

type: WAREHOUSE,

cluster_id: NULL,

warehouse_id: ec58ee3772e8d305

}
executed_by_user_id string A ID do usuário que executou a instrução. 2967555311742259
executed_by string O endereço de email ou nome de usuário do usuário que executou a instrução. example@databricks.com
statement_text string É o texto da instrução SQL. Se você tiver configurado chaves gerenciadas pelo cliente, statement_text estará vazio. Devido a limitações de armazenamento, valores de texto de instrução mais longos são compactados. Mesmo com a compactação, você pode atingir um limite de caracteres. SELECT 1
statement_type string O tipo de instrução. Por exemplo: ALTER, COPY e INSERT. SELECT
error_message string Mensagem que descreve a condição de erro. Se você tiver configurado chaves gerenciadas pelo cliente, error_message estará vazio. [INSUFFICIENT_PERMISSIONS]

Insufficient privileges:

User does not have

permission SELECT on table

'default.nyctaxi_trips'.
client_application string Aplicativo cliente que executou a instrução. Por exemplo: Editor SQL do Databricks, Tableau e Power BI. Esse campo é derivado de informações fornecidas por aplicativos cliente. Embora se espere que os valores permaneçam estáticos ao longo do tempo, isso não pode ser garantido. Databricks SQL Editor
client_driver string O conector usado para se conectar ao Azure Databricks para executar a instrução. Por exemplo: Databricks SQL Driver for Go, Databricks ODBC Driver, Databricks JDBC Driver. Databricks JDBC Driver
total_duration_ms BIGINT Tempo total de execução da instrução em milissegundos (excluindo o tempo de busca de resultados). 1
waiting_for_compute_duration_ms BIGINT Tempo gasto aguardando que os recursos de computação sejam provisionados em milissegundos. 1
waiting_at_capacity_duration_ms BIGINT Tempo gasto aguardando na fila a capacidade de computação disponível em milissegundos. 1
execution_duration_ms BIGINT Tempo gasto executando a instrução em milissegundos. 1
compilation_duration_ms BIGINT Tempo gasto carregando metadados e otimizando a instrução em milissegundos. 1
total_task_duration_ms BIGINT A soma de todas as durações da tarefa em milissegundos. Esse tempo representa o tempo combinado necessário para executar a consulta em todos os núcleos de todos os nós. Ele poderá ser significativamente maior do que a duração do relógio de parede se várias tarefas forem executadas em paralelo. Pode ser menor do que a duração do relógio de parede se as tarefas aguardarem por nós disponíveis. 1
result_fetch_duration_ms BIGINT Tempo gasto, em milissegundos, buscando os resultados da instrução após a conclusão da execução. 1
start_time timestamp A hora em que o Databricks recebeu a solicitação. As informações de fuso horário são registradas no final do valor, com +00:00 representando UTC. 2022-12-05T00:00:00.000+0000
end_time timestamp A hora em que a execução da instrução terminou, excluindo o tempo de busca de resultados. As informações de fuso horário são registradas no final do valor, com +00:00 representando UTC. 2022-12-05T00:00:00.000+00:00
update_time timestamp A hora em que a instrução recebeu uma atualização de progresso pela última vez. As informações de fuso horário são registradas no final do valor, com +00:00 representando UTC. 2022-12-05T00:00:00.000+00:00
read_partitions BIGINT O número de partições lidas após a remoção. 1
pruned_files BIGINT O número de arquivos podados. 1
read_files BIGINT O número de arquivos lidos após a remoção. 1
read_rows BIGINT Número total de linhas lidas pela execução. 1
produced_rows BIGINT Número de linhas retornadas pela instrução. 1
read_bytes BIGINT Tamanho total dos dados lidos pela instrução em bytes. 1
read_io_cache_percent int O percentual de bytes de dados persistentes lidos do cache de E/S. 50
from_result_cache boolean TRUE indica que o resultado da instrução foi obtido do cache. TRUE
spilled_local_bytes BIGINT Tamanho dos dados, em bytes, gravados temporariamente no disco durante a execução da instrução. 1
written_bytes BIGINT O tamanho em bytes de dados persistentes gravados no armazenamento de objetos de nuvem. 1
shuffle_read_bytes BIGINT A quantidade total de dados em bytes enviados pela rede. 1
query_source struct Um struct que contém pares chave-valor que representam uma ou mais entidades do Databricks que estavam envolvidas na execução dessa instrução, como trabalhos, notebooks ou painéis. Esse campo registra apenas entidades do Databricks. {
job_info: {
job_id: 64361233243479
job_run_id: 887406461287882
job_task_key: “job_task_1”
job_task_run_id: 110378410199121
}
executed_as string O nome do usuário ou entidade de serviço cujo privilégio foi usado para executar a instrução. example@databricks.com
executed_as_user_id string A ID do usuário ou entidade de serviço cujo privilégio foi usado para executar a instrução. 2967555311742259

Exibir o perfil de consulta para um registro

Para navegar até o perfil de consulta de uma consulta com base em um registro na tabela de histórico de consultas, faça o seguinte:

  1. Identifique o registro de interesse e copie o statement_id do registro.
  2. Faça referência ao workspace_id do registro para garantir que você esteja conectado ao mesmo workspace que o registro.
  3. Clique em Ícone históricoHistórico de Consultas na barra lateral do workspace.
  4. No campo ID da Instrução, cole o statement_id no registro.
  5. Clique no nome de uma consulta. É exibida uma visão geral das métricas de consulta.
  6. Clique em Exibir perfil de consulta.

Materializar o histórico de consultas do metastore

O código a seguir pode ser usado para criar uma tarefa executada a cada hora, diariamente ou semanalmente para materializar o histórico de consultas de um metastore. Ajuste as variáveis HISTORY_TABLE_PATH e LOOKUP_PERIOD_DAYS adequadamente.

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