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 system
catalog. 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 query
schema. 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 WAREHOUSE 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 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:
- Identifique o registro de interesse e, em seguida, copie o
statement_id
arquivo . - Faça referência ao registro
workspace_id
para garantir que você esteja conectado ao mesmo espaço de trabalho que o registro. - Clique em Histórico de Consultas na barra lateral do espaço de trabalho.
- No campo ID da declaração, cole o
statement_id
no registro. - Clique no nome de uma consulta. Uma visão geral das métricas de consulta é exibida.
- 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()