Partilhar via


Referência do sistema de histórico de consultas table

Importante

Este sistema table está na Pré-visualização Pública. Para aceder ao table, o schema tem de estar ativado no seu systemcatalog. Para obter mais informações, consulte Habilitar esquemas de table do sistema.

Este artigo inclui informações sobre o sistema de histórico de consultas table, incluindo um esboço dos componentes schemado sistema table.

Importante

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

Table caminho: Este sistema table está localizado em system.query.history.

Usando o histórico de consultas table

O histórico de consultas table inclui registos para cada instrução SQL executada usando warehouses SQL. O table inclui registros de toda a conta de todos os espaços de trabalho na mesma região a partir da qual você acessa o table.

Por padrão, apenas os administradores têm acesso ao sistema table. Se você quiser compartilhar os dados do tablecom um usuário ou grupo, o Databricks recomenda a criação de uma exibição dinâmica para cada usuário ou grupo. Consulte Criar uma vista dinâmica.

Sistema de histórico de consultas tableschema

O histórico de consultas table usa os seguintes schema:

Column nome Tipo de dados Description Exemplo
account_id string ID da conta. 11e22ba4-87b9-4cc2

-9770-d10b894b7118
workspace_id string O ID do espaço de trabalho where em que a consulta foi executada. 1234567890123456
statement_id string O 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 O ID da sessão do Spark. 01234567-cr06-a2mp

-t0nd-a14ecfb5a9c2
execution_status string O estado de rescisão da declaração. Os values possíveis são:

- FINISHED: a execução foi bem sucedida
- FAILED: a execução falhou com o motivo da falha descrito na mensagem de erro que acompanha o documento
- CANCELED: a execução foi cancelada
FINISHED
compute estruturar Um struct que representa o tipo de recurso de computação usado para executar a instrução e a ID do recurso where aplicável. O type valor será ou WAREHOUSESERVERLESS_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 e-mail ou nome de usuário do usuário que executou a instrução. example@databricks.com
statement_text string Texto da instrução SQL. Se você configurou chaves gerenciadas pelo cliente, statement_text está vazio. SELECT 1
statement_type string O tipo de instrução. Por exemplo: ALTER, COPY, eINSERT. SELECT
error_message string Mensagem descrevendo a condição de erro. Se você configurou chaves gerenciadas pelo cliente, error_message está 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: Databricks SQL Editor, Tableau e Power BI. Este campo é derivado de informações fornecidas por aplicativos cliente. Espera-se que values permaneçam estáticos ao longo do tempo, mas 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 do resultado). 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 na fila de espera pela capacidade de computação disponível em milissegundos. 1
execution_duration_ms bigint Tempo gasto na execução da 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 de tarefas em milissegundos. Esse tempo representa o tempo combinado necessário para executar a consulta em todos os núcleos de todos os nós. Pode 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 pelos nós disponíveis. 1
result_fetch_duration_ms bigint Tempo gasto, em milissegundos, para buscar os resultados da instrução após a conclusão da execução. 1
start_time carimbo de data/hora A hora em que a Databricks recebeu a solicitação. A informação Timezone é registada no final do valor com +00:00 a representar o UTC. 2022-12-05T00:00:00.000+0000
end_time carimbo de data/hora A hora em que a execução da instrução terminou, excluindo o tempo de busca de resultados. Regista-se a informação de Timezone no final do valor, sendo que +00:00 representa o UTC. 2022-12-05T00:00:00.000+00:00
update_time carimbo de data/hora A última vez que a declaração recebeu um progresso foi update. A informação Timezone é registada no final do valor, com +00:00 a representar UTC. 2022-12-05T00:00:00.000+00:00
read_partitions bigint O número de partições lidas após a poda. 1
pruned_files bigint O número de arquivos removidos. 1
read_files bigint O número de arquivos lidos após a poda. 1
read_rows bigint Número total de linhas lidas pela instrução. 1
produced_rows bigint Número total 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 número inteiro A porcentagem 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 no 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 na nuvem. 1
shuffle_read_bytes bigint A quantidade total de dados em bytes enviados pela rede. 1
query_source estruturar Uma struct que contém pares chave-valor que representam uma ou mais entidades Databricks que estiveram envolvidas na execução desta instrução, como trabalhos, blocos de anotações ou painéis. Este campo regista apenas entidades 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 no histórico de consultas table, faça o seguinte:

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

Materializar o histórico de consultas a partir do seu metastore

O código a seguir pode ser usado para agendar uma tarefa para executar 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 de acordo.

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