Referência da tabela do sistema de histórico de consultas
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.
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 |
---|---|---|---|
| string | ID do site account. |
|
| string | O ID do site workspace onde a consulta foi executada. |
|
| 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. |
|
| string | A ID da sessão do Spark. |
|
| string | O estado de rescisão da declaração. Os valores possíveis são: |
|
| 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 |
|
| string | O ID do usuário que executou a declaração. |
|
| string | O endereço email ou o nome de usuário do usuário que executou a declaração. |
|
| string | Texto da instrução SQL. Se o senhor tiver configurado a chave de gerenciar o cliente, |
|
| string | O tipo de declaração. Por exemplo: |
|
| string | Mensagem descrevendo a condição do erro. Se o senhor tiver configurado a chave de gerenciar o cliente, |
|
| 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. |
|
| 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. |
|
| bigint | Tempo total de execução da instrução em milissegundos (excluindo o tempo de busca do resultado). |
|
| bigint | Tempo de espera para que o compute recurso seja provisionado, em milissegundos. |
|
| bigint | Tempo de espera na fila para a capacidade compute disponível, em milissegundos. |
|
| bigint | Tempo gasto executando a instrução em milissegundos. |
|
| bigint | Tempo gasto carregando metadados e otimizando a declaração em milissegundos. |
|
| 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. |
|
| bigint | Tempo gasto, em milissegundos, na busca dos resultados da declaração após o término da execução. |
|
| 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 |
|
| 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 |
|
| 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 |
|
| bigint | O número de partições lidas após a poda. |
|
| bigint | O número de arquivos removidos. |
|
| bigint | O número de arquivos lidos após a poda. |
|
| bigint | Número total de linhas lidas pela declaração. |
|
| bigint | Número total de linhas retornadas pela instrução. |
|
| bigint | Tamanho total dos dados lidos pela instrução em bytes. |
|
| int | A porcentagem de bytes de dados persistentes lidos do cache de E/S. |
|
| boolean |
|
|
| bigint | Tamanho dos dados, em bytes, gravados temporariamente no disco durante a execução da instrução. |
|
| bigint | O tamanho em bytes dos dados persistentes gravados no armazenamento de objetos na nuvem. |
|
| bigint | A quantidade total de dados em bytes enviados pela rede. |
|
| 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. |
|
| string | O nome do usuário ou da entidade de serviço cujo privilégio foi usado para executar a declaração. |
|
| string | O ID do usuário ou da entidade de serviço cujo privilégio foi usado para executar a declaração. |
|
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
- Identifique o registro de interesse e copie o
statement_id
do registro. - Consulte o site
workspace_id
do registro para garantir que o senhor esteja conectado ao mesmo site workspace do registro. - Clique em
Query History na barra lateral workspace.
- No campo ID da declaração , cole o
statement_id
no registro. - Clique no nome de uma consulta. É exibida uma visão geral das métricas de consulta.
- 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:
- alerta : Declaração acionada a partir de um alerta
- sql_query_id : Declaração executada nesta sessão do editor SQL
- dashboard_id : Instrução executada a partir de um painel
- legacy_dashboard_id : Declaração executada a partir de um painel legado
- genie_space_id : Declaração executada a partir de um espaço Genie
- Notebook : Declaração executada a partir de um Notebook
- Trabalho.Trabalho : Declaração executada em um trabalho
- Trabalho.Trabalho : Declaração executada a partir de uma execução de trabalho
- Trabalho.Trabalho : Declaração executada em um trabalho tarefa execuçã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
elegacy_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
ealert_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ãojob_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.
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()