Categorias:

Information Schema , Funções de tabela

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:

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> ] )
Copy

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 especificar SYSTEM (USER_NAME =>'SYSTEM'), que é um serviço em segundo plano e não um usuário. No entanto, você pode filtrar em user_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 a 10000

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 e external_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 valor execution_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

query_id

VARCHAR

A ID única da instrução.

query_text

VARCHAR

Texto da instrução SQL.

database_name

VARCHAR

Banco de dados especificado no contexto da consulta na compilação.

schema_name

VARCHAR

Esquema especificado no contexto da consulta na compilação.

query_type

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.

session_id

NUMBER

Sessão que executou a instrução.

user_name

VARCHAR

Usuário que emitiu a consulta.

user_type

VARCHAR

O tipo de usuário que executa a consulta. É o mesmo que a coluna type em Exibição USERS. Se um serviço do Snowpark Container Services executar a consulta, o tipo de usuário será SNOWFLAKE_SERVICE (consulte Acesso ao histórico de consultas de serviços).

user_database_name

VARCHAR

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o nome do banco de dados do serviço; caso contrário, é NULL.

user_schema_name

VARCHAR

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o nome do esquema do serviço; caso contrário, é NULL.

role_name

VARCHAR

Função que estava ativa na sessão no momento da consulta.

warehouse_name

VARCHAR

Warehouse em que a consulta foi executada, se houver.

warehouse_size

VARCHAR

Tamanho do warehouse quando esta instrução foi executada.

warehouse_type

VARCHAR

Tipo do warehouse quando esta instrução foi executada.

cluster_number

NUMBER

O cluster (em um warehouse multicluster) no qual esta instrução foi executada.

query_tag

VARCHAR

Tag de consulta definida para esta instrução pelo parâmetro de sessão QUERY_TAG.

execution_status

VARCHAR

Status de execução da consulta: resuming_warehouse, running, queued, blocked, success, failed_with_error ou failed_with_incident.

error_code

NUMBER

Código de erro, se a consulta tiver retornado um erro

error_message

VARCHAR

Mensagem de erro, se a consulta tiver retornado um erro

start_time

TIMESTAMP_LTZ

Hora de início da instrução

end_time

TIMESTAMP_LTZ

Hora de término da instrução. Se a consulta ainda estiver em execução, o end_time é o carimbo de data/hora de época UNIX (“1970-01-01 00:00:00”), ajustado para o fuso horário local. Por exemplo, para o fuso horário do Pacífico, isso seria “1969-12-31 16:00:00.000 -0800”.

total_elapsed_time

NUMBER

Tempo decorrido (em milissegundos)

bytes_scanned

NUMBER

Número de bytes digitalizados por esta instrução.

rows_produced

NUMBER

Número de linhas produzidas por esta instrução.

compilation_time

NUMBER

Tempo de compilação (em milissegundos)

execution_time

NUMBER

Tempo de execução (em milissegundos)

queued_provisioning_time

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.

queued_repair_time

NUMBER

Tempo (em milissegundos) gasto na fila do warehouse, esperando que os recursos computados no warehouse sejam reparados.

queued_overload_time

NUMBER

Tempo (em milissegundos) gasto na fila de espera do warehouse, devido à sobrecarga do warehouse devido à carga de trabalho atual da consulta.

transaction_blocked_time

NUMBER

Tempo (em milissegundos) gasto bloqueado por um DML concorrente.

outbound_data_transfer_cloud

VARCHAR

Provedor de nuvem de destino para instruções que descarregam dados para outra região e/ou nuvem.

outbound_data_transfer_region

VARCHAR

Região de destino para instruções que descarregam dados para outra região e/ou nuvem.

outbound_data_transfer_bytes

NUMBER

Número de bytes transferidos em instruções que descarregam dados para outra região e/ou nuvem.

inbound_data_transfer_cloud

VARCHAR

Provedor de nuvem de origem para instruções que carregam dados de outra região e/ou nuvem.

inbound_data_transfer_region

VARCHAR

Região de origem para instruções que carregam dados de outra região e/ou nuvem.

inbound_data_transfer_bytes

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.

list_external_file_time

NUMBER

Tempo (em milissegundos) gasto listando arquivos externos.

credits_used_cloud_services

NUMBER

Número de créditos usados para serviços de nuvem.

release_version

VARCHAR

Versão de lançamento no formato de major_release.minor_release.patch_release.

external_function_total_invocations

NUMBER

O número agregado de vezes que esta consulta chamou serviços remotos. Para obter detalhes importantes, consulte as Notas de uso.

external_function_total_sent_rows

NUMBER

O número total de linhas que esta consulta enviou em todas as chamadas para todos os serviços remotos.

external_function_total_received_rows

NUMBER

O número total de linhas que esta consulta recebeu de todas as chamadas para todos os serviços remotos.

external_function_total_sent_bytes

NUMBER

O número total de bytes que esta consulta enviou em todas as chamadas para todos os serviços remotos.

external_function_total_received_bytes

NUMBER

O número total de bytes que esta consulta recebeu de todas as chamadas para todos os serviços remotos.

is_client_generated_statement

BOOLEAN

Indica se a consulta foi gerada pelo cliente.

query_hash

VARCHAR

O valor de hash calculado com base no texto canônico SQL.

query_hash_version

NUMBER

A versão da lógica usada para calcular QUERY_HASH.

query_parameterized_hash

VARCHAR

O valor de hash calculado com base na consulta parametrizada.

query_parameterized_hash_version

NUMBER

A versão da lógica usada para calcular QUERY_PARAMETERIZED_HASH.

transaction_id

NUMBER

ID da transação que contém a instrução ou 0 se a instrução não for executada dentro de uma transação.

query_acceleration_bytes_scanned

NUMBER

Número de bytes digitalizados por Query Acceleration Service.

query_acceleration_partitions_scanned

NUMBER

Número de partições digitalizadas por Query Acceleration Service.

query_acceleration_upper_limit_scale_factor

NUMBER

Fator de escala no limite superior do qual uma consulta teria se beneficiado.

bytes_written_to_result

NUMBER

Número de bytes gravados em um objeto de resultado. Por exemplo, SELECT * FROM ... produziria um conjunto de resultados em formato tabular representando cada campo na seleção. . . Em geral, o objeto de resultado representa o que for produzido como resultado da consulta, e bytes_written_to_result representa o tamanho do resultado retornado.

rows_written_to_result

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 é 1.

rows_inserted

NUMBER

Número de linhas inseridas pela consulta.

query_retry_time

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.

query_retry_cause

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.

fault_handling_time

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;
Copy

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;
Copy

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;
Copy

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')));
Copy

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));
Copy