Pular para o conteúdo principal

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

info

Visualização

Essa tabela do sistema está em Pré-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 de tabelas do sistema.

Este artigo inclui informações sobre a tabela do sistema de histórico de consultas, incluindo um esboço do esquema da tabela.

important

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

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

Usando a tabela de histórico de consultas

A tabela de histórico de consultas inclui registros de execução de consultas usando SQL warehouse ou serverless compute para Notebook e Job. A tabela inclui registros de todo o accountde todos os espaços de trabalho na mesma região de onde o senhor acessa a tabela.

Em default, somente os administradores têm acesso à tabela do sistema. Se quiser compartilhar os dados da tabela com um usuário ou grupo, o site Databricks recomenda a criação de um view dinâmico para cada usuário ou grupo. Consulte Criar um site dinâmico view.

Consultar o esquema da tabela do sistema histórico

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

Nome da coluna

Tipo de dados

Descrição

Exemplo

account_id

string

ID do site account.

11e22ba4-87b9-4cc2
-9770-d10b894b7118

workspace_id

string

O ID do site workspace onde a consulta foi executada.

1234567890123456

statement_id

string

O ID que identifica de forma exclusiva a execução da instrução. O senhor pode usar esse ID para localizar a execução da declaração na Query History UI.

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 rescisão da declaração. Os valores 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 anexa
- CANCELED: a execução foi cancelada

FINISHED

compute

struct

Uma estrutura que representa o tipo de compute recurso usado para executar a declaração e o ID do recurso, quando aplicável. O valor type será WAREHOUSE ou SERVERLESS_COMPUTE.

{
type: WAREHOUSE,
cluster_id: NULL,
warehouse_id: ec58ee3772e8d305
}

executed_by_user_id

string

O ID do usuário que executou a declaração.

2967555311742259

executed_by

string

O endereço email ou o nome de usuário do usuário que executou a declaração.

example@databricks.com

statement_text

string

Texto da instrução SQL. Se o senhor tiver configurado a chave de gerenciar o cliente, statement_text estará vazio. Devido às limitações de armazenamento, valores de texto de declaração mais longos são compactados. Mesmo com a compressão, você pode atingir um limite de caracteres.

SELECT 1

statement_type

string

O tipo de declaração. Por exemplo: ALTER, COPY e INSERT.

SELECT

error_message

string

Mensagem descrevendo a condição do erro. Se o senhor tiver configurado a chave de gerenciar o 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 executa a declaração. Por exemplo: Databricks SQL Editor, Tableau e Power BI. Esse campo é derivado das informações fornecidas pelos aplicativos clientes. 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 a Databricks para executar a declaraçã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 de espera para que o compute recurso seja provisionado, em milissegundos.

1

waiting_at_capacity_duration_ms

bigint

Tempo de espera na fila para a capacidade compute 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 declaração em milissegundos.

1

total_task_duration_ms

bigint

A soma de toda a duração da tarefa em milissegundos. Esse tempo representa o tempo combinado que o senhor levou para executar a consulta em todos os núcleos de todos os nós. Ela pode ser significativamente mais longa do que a duração do relógio de parede se várias tarefas forem executadas em paralelo. Ela pode ser mais curta do que a duração do relógio de parede se a tarefa esperar por nós disponíveis.

1

result_fetch_duration_ms

bigint

Tempo gasto, em milissegundos, na busca dos resultados da declaração após o término da execução.

1

start_time

carimbo de data/hora

A hora em que a 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

carimbo de data/hora

A hora em que a execução da instrução terminou, excluindo o tempo de busca do resultado. 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

carimbo de data/hora

A hora em que a declaração recebeu pela última vez uma atualização de progresso. 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 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 declaraçã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

int

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 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 dos 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

struct

Uma estrutura que contém par key-value representando Databricks entidades que estavam envolvidas na execução dessa declaração, como Job, Notebook ou dashboards. Esse campo registra apenas entidades da 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
}

executed_as

string

O nome do usuário ou da entidade de serviço cujo privilégio foi usado para executar a declaração.

example@databricks.com

executed_as_user_id

string

O ID do usuário ou da entidade de serviço cujo privilégio foi usado para executar a declaração.

2967555311742259

visualizar o perfil de consulta de 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. Consulte o site workspace_id do registro para garantir que o senhor esteja conectado ao mesmo site workspace do registro.
  3. Clique em Ícone de história Query History na barra lateral workspace.
  4. No campo ID da declaraçã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 Ver perfil de consulta .

Entendendo a coluna query_source

A coluna query_source contém um conjunto de identificadores exclusivos das entidades do Databricks envolvidas na execução da instrução.

Se a coluna query_source contiver vários IDs, isso significa que a execução da instrução foi acionada por várias entidades. Por exemplo, um resultado de trabalho pode acionar um alerta que chama uma consulta em SQL. Neste exemplo, todos os três IDs serão preenchidos em query_source. Os valores dessa coluna não são classificados por ordem de execução.

As possíveis fontes de consulta são:

Combinações válidas de query_source

Os exemplos a seguir mostram como a coluna query_source é preenchida, dependendo de como a consulta é executada:

  • As consultas executadas durante a execução de um trabalho incluem uma estrutura job_info preenchida:

    {
    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
    }

  • As consultas de painéis antigos incluem sql_query_id e legacy_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
    }

  • As consultas de alerta incluem sql_query_id e alert_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
    }

  • As consultas dos painéis incluem dashboard_id, mas não job_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
    }

Materializar o histórico de consultas de seu metastore

O código a seguir pode ser usado para criar um trabalho executado por 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.

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