- Categorias:
QUERY_HISTORY , QUERY_HISTORY_BY_*¶
Você pode usar a família QUERY_HISTORY de funções de tabela para consultar o histórico de consultas do Snowflake em várias dimensões:
QUERY_HISTORY retorna consultas dentro de um intervalo de tempo especificado.
QUERY_HISTORY_BY_SESSION retorna consultas dentro de uma sessão e intervalo de tempo especificados.
QUERY_HISTORY_BY_USER retorna consultas enviadas por um usuário especificado dentro de um intervalo de tempo especificado.
QUERY_HISTORY_BY_WAREHOUSE retorna consultas executadas por um warehouse especificado dentro de um intervalo de tempo especificado.
Cada função é otimizada para consulta na dimensão especificada. Os resultados podem ser ainda mais filtrados usando predicados SQL.
Consulte também:
Exibição QUERY_HISTORY (Account Usage) Monitoramento da atividade de consulta com o Histórico de consultas (painel de controle do Snowsight)
Sintaxe¶
QUERY_HISTORY(
[ END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_SESSION(
[ SESSION_ID => <constant_expr> ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_USER(
[ USER_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_WAREHOUSE(
[ WAREHOUSE_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
Argumentos¶
Todos os argumentos são opcionais.
END_TIME_RANGE_START => constant_expr
, .END_TIME_RANGE_END => constant_expr
Intervalo de tempo (no formato TIMESTAMP_LTZ), dos últimos 7 dias, nos quais a consulta terminou em execução:
Se
END_TIME_RANGE_END
não for especificado, a função retorna todas as consultas, inclusive as que ainda estão em execução.Se
END_TIME_RANGE_END
for CURRENT_TIMESTAMP, a função retorna apenas aquelas consultas que foram concluídas.
Se o intervalo não ficar dentro dos últimos 7 dias, um erro é retornado.
Nota
Se não for especificada a hora de início ou fim, as consultas mais recentes são retornadas até o limite especificado.
SESSION_ID => constant_expr
Aplica-se somente a QUERY_HISTORY_BY_SESSION
O identificador numérico de uma sessão ou CURRENT_SESSION. Somente as consultas da sessão especificada são retornadas.
Padrão: CURRENT_SESSION
USER_NAME => 'string'
Aplica-se somente a QUERY_HISTORY_BY_USER
Uma cadeia de caracteres especificando um nome de login de usuário ou CURRENT_USER. Somente as consultas feitas pelo usuário especificado são retornadas. Observe que o nome de login deve ser delimitado por aspas simples. Além disso, se o nome de login contiver quaisquer espaços, letras maiúsculas e minúsculas misturadas ou caracteres especiais, o nome deve ser delimitado por aspas duplas dentro das aspas simples (por exemplo,
'"User 1"'
vs'user1'
). Você não pode especificarSYSTEM
(USER_NAME =>'SYSTEM'
), que é um serviço em segundo plano e não um usuário. No entanto, você pode filtrar emuser_name='SYSTEM'
ao executar consultas nas funções de tabela QUERY_HISTORY.Padrão: CURRENT_USER
WAREHOUSE_NAME => 'string'
Aplica-se somente a QUERY_HISTORY_BY_WAREHOUSE
Uma cadeia de caracteres especificando um nome de warehouse ou CURRENT_WAREHOUSE. Somente as consultas executadas por esse warehouse são retornadas. Observe que o nome do warehouse deve ser delimitado por aspas simples. Além disso, se o nome do warehouse contiver quaisquer espaços, letras maiúsculas e minúsculas misturadas ou caracteres especiais, o nome deve ser delimitado por aspas duplas dentro das aspas simples (por exemplo,
'"My Warehouse"'
vs'mywarehouse'
).Padrão: CURRENT_WAREHOUSE
RESULT_LIMIT => num
Um número especificando o número máximo de linhas retornadas pela função:
Se o número de linhas correspondentes for maior que este limite, as consultas com o tempo final mais recente (ou aquelas que ainda estão em execução) são retornadas até o limite especificado.
Intervalo:
1
a10000
Padrão:
100
.INCLUDE_CLIENT_GENERATED_STATEMENT => 'boolean_expr'
Especifica se as instruções geradas pelo cliente estão incluídas nas consultas de função de tabela (dado o valor da coluna
is_client_generated_statement
).Padrão:
FALSE
.O ACCOUNT_USAGE Exibição QUERY_HISTORY também contém uma coluna
is_client_generated_statement
, mas as consultas dessa exibição retornam todas as instruções, sejam elas geradas pelo cliente ou não. Se necessário, você pode filtrar o resultado de consulta.
Notas de uso¶
Retorna consultas executadas pelo usuário atual. Também retorna as consultas executadas por qualquer usuário quando a função de execução, ou uma função superior em uma hierarquia, tiver um dos seguintes privilégios:
O privilégio MONITOR ou OPERATE nos warehouses gerenciados pelo usuário em que as consultas foram executadas.
O privilégio MONITOR ou OPERATE na tarefa. Exceção: se a tarefa executar um procedimento armazenado de direito do proprietário ou UDF, a função exigirá pelo menos o privilégio MONITOR no warehouse em que a tarefa foi executada para visualizar a consulta do procedimento armazenado e a consulta da UDF.
O privilégio MONITOR EXECUTION na conta em que a tarefa reside.
Exceções: nem os procedimentos armazenados nem as funções definidas pelo usuário (UDFs) podem executar essa consulta.
Para obter mais informações, consulte Privilégios de warehouse virtual.
Quando você chama uma função de tabela do Information Schema, sua sessão deve usar INFORMATION_SCHEMA, ou o nome da função deve ser totalmente qualificado. Para obter mais informações, consulte Snowflake Information Schema.
Os valores para as colunas
external_function_total_invocations
,external_function_total_sent_rows
,external_function_total_received_rows
,external_function_total_sent_bytes
eexternal_function_total_received_bytes
são afetados por muitos fatores, inclusive:O número de funções externas na instrução SQL.
O número de linhas por lote enviadas para cada serviço remoto.
O número de tentativas devido a erros transitórios (por exemplo, porque uma resposta não foi recebida dentro do tempo esperado).
As consultas canceladas são identificadas por seu texto
error_message
(SQL execution canceled
), não por seu valorexecution_status
.
Colunas de nova tentativa de consulta¶
Uma consulta pode precisar ser repetida uma ou mais vezes para ser concluída com êxito. Pode haver diversas causas que resultam em uma nova tentativa de consulta. Algumas dessas causas são acionáveis, ou seja, um usuário pode fazer alterações para reduzir ou eliminar novas tentativas de consulta para uma consulta específica. Por exemplo, se uma consulta for repetida devido a um erro de falta de memória, a modificação das configurações do warehouse poderá resolver o problema.
Algumas novas tentativas de consulta são causadas por uma falha que não é acionável. Ou seja, não há nenhuma alteração que um usuário possa fazer para impedir a repetição da consulta. Por exemplo, uma interrupção na rede pode resultar em uma nova tentativa de consulta. Neste caso, não há nenhuma alteração na consulta ou no warehouse que a executa que possa impedir a nova tentativa da consulta.
As colunas QUERY_RETRY_TIME, QUERY_RETRY_CAUSE e FAULT_HANDLING_TIME podem ajudar você a otimizar as consultas que são repetidas e a entender melhor as flutuações no desempenho da consulta.
Saída¶
A função retorna as seguintes colunas:
Nome da coluna |
Tipo de dados |
Descrição |
---|---|---|
|
VARCHAR |
A ID única da instrução. |
|
VARCHAR |
Texto da instrução SQL. |
|
VARCHAR |
Banco de dados especificado no contexto da consulta na compilação. |
|
VARCHAR |
Esquema especificado no contexto da consulta na compilação. |
|
VARCHAR |
DML, consulta etc. Se a consulta estiver atualmente em execução, ou se a consulta tiver falhado, então o tipo de consulta pode ser UNKNOWN. |
|
NUMBER |
Sessão que executou a instrução. |
|
VARCHAR |
Usuário que emitiu a consulta. |
|
VARCHAR |
O tipo de usuário que executa a consulta. É o mesmo que a coluna |
|
VARCHAR |
Quando o valor na coluna |
|
VARCHAR |
Quando o valor na coluna |
|
VARCHAR |
Função que estava ativa na sessão no momento da consulta. |
|
VARCHAR |
Warehouse em que a consulta foi executada, se houver. |
|
VARCHAR |
Tamanho do warehouse quando esta instrução foi executada. |
|
VARCHAR |
Tipo do warehouse quando esta instrução foi executada. |
|
NUMBER |
O cluster (em um warehouse multicluster) no qual esta instrução foi executada. |
|
VARCHAR |
Tag de consulta definida para esta instrução pelo parâmetro de sessão QUERY_TAG. |
|
VARCHAR |
Status de execução da consulta: resuming_warehouse, running, queued, blocked, success, failed_with_error ou failed_with_incident. |
|
NUMBER |
Código de erro, se a consulta tiver retornado um erro |
|
VARCHAR |
Mensagem de erro, se a consulta tiver retornado um erro |
|
TIMESTAMP_LTZ |
Hora de início da instrução |
|
TIMESTAMP_LTZ |
Hora de término da instrução. Se a consulta ainda estiver em execução, o |
|
NUMBER |
Tempo decorrido (em milissegundos) |
|
NUMBER |
Número de bytes digitalizados por esta instrução. |
|
NUMBER |
Número de linhas produzidas por esta instrução. |
|
NUMBER |
Tempo de compilação (em milissegundos) |
|
NUMBER |
Tempo de execução (em milissegundos) |
|
NUMBER |
Tempo (em milissegundos) gasto na fila do warehouse, esperando que o warehouse compute recursos para provisionar, devido à criação, retomada ou redimensionamento do warehouse. |
|
NUMBER |
Tempo (em milissegundos) gasto na fila do warehouse, esperando que os recursos computados no warehouse sejam reparados. |
|
NUMBER |
Tempo (em milissegundos) gasto na fila de espera do warehouse, devido à sobrecarga do warehouse devido à carga de trabalho atual da consulta. |
|
NUMBER |
Tempo (em milissegundos) gasto bloqueado por um DML concorrente. |
|
VARCHAR |
Provedor de nuvem de destino para instruções que descarregam dados para outra região e/ou nuvem. |
|
VARCHAR |
Região de destino para instruções que descarregam dados para outra região e/ou nuvem. |
|
NUMBER |
Número de bytes transferidos em instruções que descarregam dados para outra região e/ou nuvem. |
|
VARCHAR |
Provedor de nuvem de origem para instruções que carregam dados de outra região e/ou nuvem. |
|
VARCHAR |
Região de origem para instruções que carregam dados de outra região e/ou nuvem. |
|
NUMBER |
Número de bytes transferidos em uma operação de replicação de outra conta. A conta de origem pode estar na mesma região ou em uma região diferente da conta atual. |
|
NUMBER |
Tempo (em milissegundos) gasto listando arquivos externos. |
|
NUMBER |
Número de créditos usados para serviços de nuvem. |
|
VARCHAR |
Versão de lançamento no formato de |
|
NUMBER |
O número agregado de vezes que esta consulta chamou serviços remotos. Para obter detalhes importantes, consulte as Notas de uso. |
|
NUMBER |
O número total de linhas que esta consulta enviou em todas as chamadas para todos os serviços remotos. |
|
NUMBER |
O número total de linhas que esta consulta recebeu de todas as chamadas para todos os serviços remotos. |
|
NUMBER |
O número total de bytes que esta consulta enviou em todas as chamadas para todos os serviços remotos. |
|
NUMBER |
O número total de bytes que esta consulta recebeu de todas as chamadas para todos os serviços remotos. |
|
BOOLEAN |
Indica se a consulta foi gerada pelo cliente. |
|
VARCHAR |
O valor de hash calculado com base no texto canônico SQL. |
|
NUMBER |
A versão da lógica usada para calcular |
|
VARCHAR |
O valor de hash calculado com base na consulta parametrizada. |
|
NUMBER |
A versão da lógica usada para calcular |
|
NUMBER |
ID da transação que contém a instrução ou |
|
NUMBER |
Número de bytes digitalizados por Query Acceleration Service. |
|
NUMBER |
Número de partições digitalizadas por Query Acceleration Service. |
|
NUMBER |
Fator de escala no limite superior do qual uma consulta teria se beneficiado. |
|
NUMBER |
Número de bytes gravados em um objeto de resultado. Por exemplo, |
|
NUMBER |
Número de linhas gravadas em um objeto de resultado. Para CREATE TABLE AS SELECT (CTAS) e todas as operações DML, esse resultado é |
|
NUMBER |
Número de linhas inseridas pela consulta. |
|
NUMBER |
Tempo total de execução (em milissegundos) para novas tentativas de consulta causadas por erros acionáveis. Para obter mais informações, consulte Colunas de nova tentativa de consulta. |
|
VARCHAR |
Erro que causou a nova tentativa de consulta. Se não houver nova tentativa de consulta, o campo será NULL. Para obter mais informações, consulte Colunas de nova tentativa de consulta. |
|
NUMBER |
Tempo total de execução (em milissegundos) para novas tentativas de consulta causadas por erros que não são acionáveis. Para obter mais informações, consulte Colunas de nova tentativa de consulta. |
Os valores potenciais para a coluna query_type
incluem:
CREATE_USER
CREATE_ROLE
CREATE_NETWORK_POLICY
ALTER_ROLE
ALTER_NETWORK_POLICY
ALTER_ACCOUNT
DROP_SEQUENCE
DROP_USER
DROP_ROLE
DROP_NETWORK_POLICY
RENAME_NETWORK_POLICY
REVOKE
Exemplos¶
Recuperar até as últimas 100 consultas executadas na sessão atual:
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_SESSION())
ORDER BY start_time;
Recuperar as 100 últimas consultas executadas pelo usuário atual (ou executadas por qualquer usuário em qualquer warehouse no qual o usuário atual tenha o privilégio MONITOR):
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY())
ORDER BY start_time;
Recuperar as 100 últimas consultas executadas na última hora pelo usuário atual (ou executadas por qualquer usuário em qualquer warehouse no qual o usuário atual tenha o privilégio MONITOR):
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(DATEADD('hours',-1,CURRENT_TIMESTAMP()),CURRENT_TIMESTAMP()))
ORDER BY start_time;
Recuperar todas as consultas executadas pelo usuário atual (ou executadas por qualquer usuário em qualquer warehouse no qual o usuário atual tenha o privilégio MONITOR) em um bloco de tempo de 30 minutos especificado nos últimos 7 dias:
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(
END_TIME_RANGE_START=>TO_TIMESTAMP_LTZ('2017-12-4 12:00:00.000 -0700'),
END_TIME_RANGE_END=>TO_TIMESTAMP_LTZ('2017-12-4 12:30:00.000 -0700')));
Recuperar o número de instruções geradas pelo cliente que foram executadas em um warehouse chamado my_xsmall_wh
:
SELECT COUNT(*)
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_WAREHOUSE(
WAREHOUSE_NAME => 'my_xsmall_wh',
INCLUDE_CLIENT_GENERATED_STATEMENT => TRUE));