Categorias:

Information Schema , Funções de tabela

QUERY_HISTORY , QUERY_HISTORY_BY_*

A família QUERY_HISTORY de funções de tabela pode ser usada 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> ] )

QUERY_HISTORY_BY_SESSION(
      [ SESSION_ID => <constant_expr> ]
      [, END_TIME_RANGE_START => <constant_expr> ]
      [, END_TIME_RANGE_END => <constant_expr> ]
      [, RESULT_LIMIT => <num> ] )

QUERY_HISTORY_BY_USER(
      [ USER_NAME => '<string>' ]
      [, END_TIME_RANGE_START => <constant_expr> ]
      [, END_TIME_RANGE_END => <constant_expr> ]
      [, RESULT_LIMIT => <num> ] )

QUERY_HISTORY_BY_WAREHOUSE(
      [ WAREHOUSE_NAME => '<string>' ]
      [, END_TIME_RANGE_START => <constant_expr> ]
      [, END_TIME_RANGE_END => <constant_expr> ]
      [, RESULT_LIMIT => <num> ] )
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').

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.

Notas de uso

  • Retorna consultas executadas pelo usuário atual. Também retorna consultas executadas por qualquer usuário quando a função de execução, ou uma função superior em uma hierarquia, tem o privilégio MONITOR ou OPERATE nos warehouses em que as consultas foram executadas. Para obter mais informações, consulte Privilégios de warehouse virtual.

  • Ao chamar uma função de tabela do Information Schema, a sessão deve ter um esquema INFORMATION_SCHEMA em uso ou o nome da função deve ser totalmente qualificado. Para obter mais detalhes, 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).

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.

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

VARIANT

Matriz de mensagens de erro para erros acionáveis. A matriz contém uma mensagem de erro para cada nova tentativa de consulta. Se não houver nova tentativa de consulta, a matriz estará vazia. 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) dentro de um intervalo de tempo especificado de 30 minutos 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