Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Important
Esta tabela do sistema está em Visualização Pública.
Este artigo inclui informações sobre a tabela do sistema de histórico de consultas, incluindo um esboço do esquema da tabela.
Localização 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 de consultas executadas usando warehouses SQL ou computação sem servidor para notebooks e trabalhos. A tabela inclui registros em toda a conta de todos os espaços de trabalho na mesma região a partir 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 | Description | Example |
|---|---|---|---|
account_id |
cadeia | ID da conta. | 11e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
cadeia | A ID do workspace em que a consulta foi executada. | 1234567890123456 |
statement_id |
cadeia | 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 |
cadeia | A ID da sessão do Spark. | 01234567-cr06-a2mp-t0nd-a14ecfb5a9c2 |
execution_status |
cadeia | O estado de conclusão da instrução. Os valores possíveis são:
|
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 |
cadeia | O ID do usuário que executou a instrução. | 2967555311742259 |
executed_by |
cadeia | O endereço de email ou nome de usuário do usuário que executou a instrução. | example@databricks.com |
statement_text |
cadeia | É 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 |
cadeia | O tipo de declaração. Por exemplo: ALTER, COPY e INSERT. |
SELECT |
error_message |
cadeia | 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 |
cadeia | 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 |
cadeia | O conector usado para se conectar ao Databricks para executar a instrução. Por exemplo: Databricks SQL Driver for Go, Databricks ODBC Driver, Databricks JDBC Driver. | Databricks JDBC Driver |
cache_origin_statement_id |
cadeia | Para os resultados da consulta obtidos do cache, esse campo contém a ID da instrução da consulta que inseriu originalmente o resultado no cache. Se o resultado da consulta não for obtido do cache, esse campo conterá a ID da própria instrução da consulta. | 01f034de-5e17-162d-a176-1f319b12707b |
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 pela 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 total 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. Ele pode ser menor 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 |
carimbo de data/hora | 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 |
carimbo de data/hora | Hora em que a execução da instrução foi concluída, 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 |
carimbo de data/hora | Hora em que a instrução recebeu a última 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 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 poda. | 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 | O 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 |
written_rows |
bigint | O número de linhas de dados persistentes gravadas no armazenamento de objetos de nuvem. | 1 |
written_files |
bigint | Número de arquivos 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 | Uma struct que contém pares de chave-valor que representam entidades do Databricks envolvidas na execução desta instrução, como trabalhos, notebooks ou painéis. Esse campo registra apenas entidades do 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 | Um struct que contém parâmetros nomeados e posicionais usados em consultas parametrizadas. Parâmetros nomeados são representados por pares chave-valor que associam nomes de parâmetros a valores. Os parâmetros posicionais são representados como uma lista em que o índice indica a posição do parâmetro. Apenas um tipo (nomeado ou posicional) pode estar presente por vez. | {named_parameters: { "param-1": 1, "param-2": "hello"},pos_parameters: null,is_truncated: false} |
executed_as |
cadeia | 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 |
cadeia | 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:
- Identifique o registro de interesse e, em seguida, copie a parte do registro indicada por
statement_id. - Referencie
workspace_iddo registro para garantir que você esteja conectado ao mesmo espaço de trabalho que o registro. - Clique no
Histórico de consultas na barra lateral do workspace.
- No campo ID da Declaração, cole o
statement_idno registro. - Clique no nome de uma consulta. É exibida uma visão geral das métricas de consulta.
- Clique em Exibir perfil de consulta.
Entender a coluna query_source
A query_source coluna contém um conjunto de identificadores exclusivos de entidades do Azure Databricks envolvidas na execução da instrução.
Se a query_source coluna contiver várias IDs, isso significa que a execução da instrução foi disparada por várias entidades. Por exemplo, um resultado de trabalho pode disparar um alerta que chama uma consulta SQL. Neste exemplo, todas as três IDs serão preenchidas dentro query_source. Os valores dessa coluna não são classificados por ordem de execução.
As possíveis fontes de consulta são:
- alert_id: instrução disparada por um alerta
- sql_query_id: Instrução executada de dentro desta sessão do editor do SQL
- dashboard_id: demonstrativo executado de um painel
- legacy_dashboard_id: demonstrativo executado de um painel herdado
- genie_space_id: demonstrativo executado de um espaço Genie
- notebook_id: instrução executada a partir de um notebook
- job_info.job_id: instrução executada em uma tarefa
- job_info.job_run_id: demonstrativo executado de uma execução de trabalho
- job_info.job_task_run_id: demonstrativo executado de uma execução de tarefa de trabalho
Combinações válidas de query_source
Os exemplos a seguir mostram como a query_source coluna é preenchida dependendo de como a consulta é executada:
As consultas executadas durante uma execução de trabalho incluem um struct
job_infopreenchido:{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 herdados incluem um
sql_query_idelegacy_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 alertas incluem um
sql_query_idealert_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 de dados dos painéis incluem um
dashboard_id, mas não umjob_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 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()
Analisar a popularidade da tabela, incluindo consultas armazenadas em cache
A tabela do sistema de linhagem de tabelas não emite entradas para os resultados da consulta do cache de resultados. Por isso, você deve unir a tabela de histórico de consultas com a tabela do sistema de linhagem para incluir consultas armazenadas em cache na sua análise.
Por exemplo, a consulta a seguir recupera tabelas com consultas que excedem uma hora de tempo de execução nos últimos 7 dias:
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;