Account Usage¶
No banco de dados SNOWFLAKE, os esquemas ACCOUNT_USAGE e READER_ACCOUNT_USAGE permitem consultar metadados de objetos, bem como dados históricos de uso, para sua conta e todas as contas de leitor (se houver) associadas à conta.
Neste tópico:
Visão geral dos esquemas Account Usage¶
- ACCOUNT_USAGE
Exibições que mostram metadados de objetos e métricas de uso para sua conta.
Em geral, essas exibições espelham as exibições e funções de tabela correspondentes no Snowflake Snowflake Information Schema, mas com as seguintes diferenças:
Registros de objetos descartados incluídos em cada exibição.
Maior tempo de retenção para dados históricos de uso.
Latência de dados.
Para obter mais detalhes, consulte Diferenças entre Account Usage e Information Schema (neste tópico). Para obter mais detalhes sobre cada exibição, consulte Exibições do ACCOUNT_USAGE (neste tópico).
- READER_ACCOUNT_USAGE
Exibições que mostram metadados de objetos e métricas de uso para todas as contas de leitor que foram criadas para sua conta (como um provedor de Secure Data Sharing).
Essas exibições são um pequeno subconjunto das exibições do ACCOUNT_USAGE que se aplicam às contas de leitor, com exceção da exibição RESOURCE_MONITORS, que está disponível apenas no READER_ACCOUNT_USAGE. Além disso, cada exibição neste esquema contém uma coluna adicional
READER_ACCOUNT_NAME
para filtrar os resultados por conta de leitor.Para obter mais detalhes sobre cada exibição, consulte Exibições do READER_ACCOUNT_USAGE (neste tópico).
Observe que essas exibições ficam vazias se nenhuma conta de leitor tiver sido criada para sua conta.
Diferenças entre Account Usage e Information Schema¶
As exibições do Account Usage e as exibições correspondentes (ou funções de tabela) no Snowflake Information Schema utilizam estruturas e convenções de nomenclatura idênticas, mas com algumas diferenças importantes, como descrito nesta seção:
Diferença |
Account Usage |
Information Schema |
---|---|---|
Inclui objetos descartados |
Sim |
Não |
Latência dos dados |
De 45 minutos a 3 horas (varia de acordo com a exibição) |
Nenhum |
Retenção de dados históricos |
1 ano |
De 7 dias a 6 meses (varia de acordo com a exibição/função de tabela) |
Para obter mais detalhes, consulte as seções seguintes.
Registros de objetos descartados¶
Exibições do Account Usage incluem registros para todos os objetos que foram descartados. Muitas das exibições para tipos de objetos contêm uma coluna adicional DELETED
que exibe o carimbo de data/hora em que o objeto foi descartado.
Além disso, como os objetos podem ser descartados e recriados com o mesmo nome, para diferenciar os registros de objetos que têm o mesmo nome, as exibições do Account Usage incluem colunas de ID, quando apropriado, que exibem as IDs internas geradas e atribuídas a cada registro pelo sistema.
Se uma coluna para um nome de objeto (por exemplo, a coluna TABLE_NAME
) é NULL, esse objeto foi descartado. Neste caso, as colunas para os nomes e IDs dos objetos pai (por exemplo, as colunas DATABASE_NAME
e SCHEMA_NAME
) também são NULL.
Observe que em algumas exibições, a coluna para o nome do objeto ainda pode conter o nome do objeto, mesmo que o objeto tenha sido descartado.
Latência dos dados¶
Devido ao processo de extração dos dados do armazenamento interno de metadados do Snowflake, as exibições do Account Usage têm alguma latência natural:
Para a maioria das exibições, a latência é de 2 horas (120 minutos).
Para as demais exibições, a latência varia entre 45 minutos e 3 horas.
Para obter mais detalhes, consulte a lista de exibições para cada esquema (neste tópico). Observe também que todos estes são períodos máximos de tempo; a latência real para uma determinada exibição quando a exibição é consultada pode ser menor.
Em contraste, as exibições/funções de tabela no Snowflake Information Schema não têm latência.
Retenção de dados históricos¶
Algumas exibições de Account Usage fornecem métricas históricas de uso. O período de retenção para essas exibições é 1 ano (365 dias).
Em contraste, as exibições e funções de tabela correspondentes no Snowflake Information Schema têm períodos de retenção muito mais curtos, variando de 7 dias a 6 meses, dependendo da exibição.
Exibições de ACCOUNT_USAGE¶
O esquema ACCOUNT_USAGE contém as seguintes exibições:
Exibição |
Tipo |
Latência [1] |
Edição [3] |
Notas |
---|---|---|---|---|
Histórico |
3 horas |
Enterprise Edition (ou superior) |
Dados retidos por 1 ano. |
|
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Objeto |
90 minutos |
|||
Histórico |
45 minutos |
Dados retidos por 1 ano. |
||
Histórico |
2 horas [2] |
Dados retidos por 1 ano. |
||
Objeto |
3 horas |
|||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
2 horas |
Dados retidos por 1 ano. |
||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Histórico |
90 minutos [2] |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
2 horas |
Dados retidos por 1 ano. |
||
Objeto |
2 horas |
|||
Histórico |
3 horas |
Enterprise Edition (ou superior) |
Dados retidos por 1 ano. |
|
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
|||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Histórico |
3 horas |
Enterprise Edition (ou superior) |
Dados retidos por 1 ano. |
|
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
45 minutos |
Dados retidos por 1 ano. |
||
Objeto |
2 horas |
|||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Histórico |
3 horas |
Enterprise Edition (ou superior) |
Dados retidos por 1 ano. |
|
Objeto |
2 horas |
|||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Objeto |
2 horas |
|||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
2 horas |
Dados retidos por 1 ano. |
||
Histórico |
12 horas |
Dados retidos por 1 ano. |
||
Objeto |
2 horas |
|||
Histórico |
2 horas |
Dados retidos por 1 ano. |
||
Histórico |
2 horas |
Utilização combinada em todas as tabelas do banco de dados e estágios internos. Dados retidos por 1 ano. |
||
Objeto |
90 minutos |
|||
Objeto |
2 horas |
|||
Objeto |
90 minutos |
|||
Objeto |
2 horas |
|||
Objeto |
2 horas |
|||
Histórico |
45 minutos |
|||
Objeto |
3 horas |
|||
Objeto |
2 horas |
|||
Objeto |
90 minutos |
|||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
||
Histórico |
3 horas |
Dados retidos por 1 ano. |
[1] Todos os tempos de latência são aproximados; em alguns casos, a latência real pode ser menor.
[2] Para tabelas com 32 ou menos instruções DML ou 100 ou menos linhas, a latência dessas exibições pode ser de até 1 dia.
[3] Unless otherwise noted, the Account Usage view is available to all accounts.
Funções de tabela do Account Usage¶
Atualmente, o Snowflake oferece suporte a uma função de tabela ACCOUNT_USAGE:
Função de tabela |
Retenção de dados |
Notas |
---|---|---|
N/A |
Os resultados retornam apenas para a função que tem acesso ao objeto especificado. |
Nota
Assim como nas exibições do Account Usage, considere a latência ao chamar esta função de tabela. A latência esperada para esta função de tabela é semelhante à latência para a exibição TAG_REFERENCES.
Exibições de READER_ACCOUNT_USAGE¶
O esquema READER_ACCOUNT_USAGE contém as seguintes exibições:
Exibição |
Tipo |
Latência [1] |
Notas |
---|---|---|---|
Histórico |
2 horas |
Dados retidos por 1 ano. |
|
Histórico |
45 minutos |
Dados retidos por 1 ano. |
|
Objeto |
2 horas |
||
Histórico |
2 horas |
Utilização combinada em todas as tabelas do banco de dados e estágios internos. Dados retidos por 1 ano. |
|
Histórico |
3 horas |
Dados retidos por 1 ano. |
[1] Todos os tempos de latência são aproximados; em alguns casos, a latência real pode ser menor.
Habilitação do uso do banco de dados do Snowflake para outras funções¶
Por padrão, o banco de dados do SNOWFLAKE está disponível apenas para a função ACCOUNTADMIN.
Para permitir que outras funções acessem o banco de dados e esquemas, bem como consultem as exibições, um usuário com a função ACCOUNTADMIN deve conceder os seguintes privilégios de compartilhamento de dados às funções desejadas:
IMPORTED PRIVILEGES
Importante
Seja cuidadoso ao conceder privilégios ao banco de dados SNOWFLAKE em uma conta que tenha a função ORGADMIN habilitada. Dentro dessa conta, qualquer pessoa com privilégios para o banco de dados SNOWFLAKE pode acessar o esquema ORGANIZATION_USAGE.
Para evitar a concessão involuntária de acesso aos dados no nível de organização, considere o uso de funções de banco de dados SNOWFLAKE para conceder acesso às exibições no esquema ACCOUNT_USAGE.
Para obter mais informações, consulte GRANT DATABASE ROLE.
Por exemplo, para conceder privilégios a duas funções adicionais:
USE ROLE ACCOUNTADMIN; GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE SYSADMIN; GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE customrole1; USE ROLE customrole1; SELECT database_name, database_owner FROM snowflake.account_usage.databases;
Esquema ACCOUNT_USAGE Funções do banco de dados SNOWFLAKE¶
Além disso, você pode conceder um controle mais preciso às contas usando as funções do banco de dados SNOWFLAKE. Para obter mais informações nas funções do banco de dados, consulte funções do banco de dados.
Os esquemas ACCOUNT_USAGE têm quatro funções de banco de dados SNOWFLAKE definidas, cada uma concedendo o privilégio SELECT em exibições específicas.
Função |
Objetivo e descrição |
---|---|
OBJECT_VIEWER |
A função OBJECT_VIEWER dá visibilidade aos metadados do objeto. |
USAGE_VIEWER |
A função USAGE_VIEWER dá visibilidade às informações históricas de uso. |
GOVERNANCE_VIEWER |
A função GOVERNANCE_VIEWER dá visibilidade às informações relacionadas às políticas. |
SECURITY_VIEWER |
A função SECURITY_VIEWER dá visibilidade às informações baseadas em segurança. |
Exibições do ACCOUNT_USAGE por função do banco de dados¶
As funções OBJECT_VIEWER, USAGE_VIEWER, GOVERNACE_VIEWER e SECURITY_VIEWER têm o privilégio SELECT de consultar as exibições de Account Usage no banco de dados compartilhado SNOWFLAKE.
Uma marca de verificação (ou seja, ✔) indica que a função tem o privilégio SELECT na exibição.
Exibição |
Função OBJECT_VIEWER |
Função USAGE_VIEWER |
Função GOVERNANCE_VIEWER |
Função SECURITY_VIEWER |
---|---|---|---|---|
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
✔ |
|||
✔ |
✔ |
|||
✔ |
||||
✔ |
✔ |
|||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
✔ |
|||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
✔ |
|||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
||||
✔ |
Esquema READER_ACCOUNT_USAGE Funções do banco de dados SNOWFLAKE¶
A função READER_USAGE_VIEWER SNOWFLAKE do banco de dados recebe o privilégio SELECT em todas as exibições READER_ACCOUNT_USAGE. Como as contas de leitores são criadas pelos clientes, espera-se que a função READER_USAGE_VIEWER seja concedida às funções usadas para monitorar o uso das contas de leitores.
Exibição |
---|
Consulta das exibições do Account Usage¶
Esta seção fornece exemplos de algumas consultas comuns/úteis utilizando as exibições no esquema ACCOUNT_USAGE.
Nota
Estes exemplos consideram que o banco de dados do SNOWFLAKE e o esquema ACCOUNT_USAGE estão em uso para a sessão atual. Os exemplos também consideram que a função ACCOUNTADMIN (ou uma função que possui IMPORTED PRIVILEGES no banco de dados) está em uso. Se não estiverem em uso, execute os seguintes comandos antes de executar as consultas nos exemplos:
USE ROLE ACCOUNTADMIN; USE SCHEMA snowflake.account_usage;
As exibições específicas do Snowflake estão sujeitas a mudanças. Evite selecionar todas as colunas dessas exibições. Em vez disso, selecione as colunas que você deseja. Por exemplo, se você quiser a coluna
name
, useSELECT name
em vez deSELECT *
.
Exemplos: métricas de login de usuário¶
Número médio de segundos entre tentativas de login com falha pelo usuário (mês até a data):
select user_name, count(*) as failed_logins, avg(seconds_between_login_attempts) as average_seconds_between_login_attempts from ( select user_name, timediff(seconds, event_timestamp, lead(event_timestamp) over(partition by user_name order by event_timestamp)) as seconds_between_login_attempts from login_history where event_timestamp > date_trunc(month, current_date) and is_success = 'NO' ) group by 1 order by 3;
Logins com falha por usuário (mês até a data):
select user_name, sum(iff(is_success = 'NO', 1, 0)) as failed_logins, count(*) as logins, sum(iff(is_success = 'NO', 1, 0)) / nullif(count(*), 0) as login_failure_rate from login_history where event_timestamp > date_trunc(month, current_date) group by 1 order by 4 desc;
Logins com falha por usuário e cliente de conexão (mês até a data):
select reported_client_type, user_name, sum(iff(is_success = 'NO', 1, 0)) as failed_logins, count(*) as logins, sum(iff(is_success = 'NO', 1, 0)) / nullif(count(*), 0) as login_failure_rate from login_history where event_timestamp > date_trunc(month, current_date) group by 1,2 order by 5 desc;
Exemplos: desempenho de warehouse¶
Esta consulta calcula as métricas de desempenho do warehouse, como rendimento e latência para intervalos de tempo de 15 minutos no decorrer de um dia.
Na amostra de código abaixo, você pode substituir CURRENT_WAREHOUSE()
pelo nome de um warehouse para calcular as métricas para aquele warehouse. Além disso, altere as datas time_from
e time_to
na cláusula WITH para especificar o período.
WITH params AS ( SELECT CURRENT_WAREHOUSE() AS warehouse_name, '2021-11-01' AS time_from, '2021-11-02' AS time_to ), jobs AS ( SELECT query_id, time_slice(start_time::timestamp_ntz, 15, 'minute','start') as interval_start, qh.warehouse_name, database_name, query_type, total_elapsed_time, compilation_time AS compilation_and_scheduling_time, (queued_provisioning_time + queued_repair_time + queued_overload_time) AS queued_time, transaction_blocked_time, execution_time FROM snowflake.account_usage.query_history qh, params WHERE qh.warehouse_name = params.warehouse_name AND start_time >= params.time_from AND start_time <= params.time_to AND execution_status = 'SUCCESS' AND query_type IN ('SELECT','UPDATE','INSERT','MERGE','DELETE') ), interval_stats AS ( SELECT query_type, interval_start, COUNT(DISTINCT query_id) AS numjobs, MEDIAN(total_elapsed_time)/1000 AS p50_total_duration, (percentile_cont(0.95) within group (order by total_elapsed_time))/1000 AS p95_total_duration, SUM(total_elapsed_time)/1000 AS sum_total_duration, SUM(compilation_and_scheduling_time)/1000 AS sum_compilation_and_scheduling_time, SUM(queued_time)/1000 AS sum_queued_time, SUM(transaction_blocked_time)/1000 AS sum_transaction_blocked_time, SUM(execution_time)/1000 AS sum_execution_time, ROUND(sum_compilation_and_scheduling_time/sum_total_duration,2) AS compilation_and_scheduling_ratio, ROUND(sum_queued_time/sum_total_duration,2) AS queued_ratio, ROUND(sum_transaction_blocked_time/sum_total_duration,2) AS blocked_ratio, ROUND(sum_execution_time/sum_total_duration,2) AS execution_ratio, ROUND(sum_total_duration/numjobs,2) AS total_duration_perjob, ROUND(sum_compilation_and_scheduling_time/numjobs,2) AS compilation_and_scheduling_perjob, ROUND(sum_queued_time/numjobs,2) AS queued_perjob, ROUND(sum_transaction_blocked_time/numjobs,2) AS blocked_perjob, ROUND(sum_execution_time/numjobs,2) AS execution_perjob FROM jobs GROUP BY 1,2 ORDER BY 1,2 ) SELECT * FROM interval_stats;Nota
Analise diferentes tipos de instrução separadamente (por exemplo, instruções SELECT independentes de INSERT ou DELETE ou outras instruções).
O valor NUMJOBS representa o rendimento para esse intervalo de tempo.
Os valores P50_TOTAL_DURATION (mediana) e P95_TOTAL_DURATION (pico) representam a latência.
O SUM_TOTAL_DURATION é a soma dos valores SUM_<job_stage>_TIME para os diferentes estágios do trabalho (COMPILATION_AND_SCHEDULING, QUEUED, BLOCKED, EXECUTION).
Analise os valores <job_stage>_RATIO quando a carga (NUMJOBS) aumentar. Procure mudanças de proporção ou desvios em relação à média.
Se QUEUED_RATIO for alto, pode não haver capacidade suficiente no warehouse. Adicione mais clusters ou aumente o tamanho do warehouse.
Exemplos: uso de crédito do warehouse¶
Créditos utilizados por cada warehouse em sua conta (mês até a data):
select warehouse_name, sum(credits_used) as total_credits_used from warehouse_metering_history where start_time >= date_trunc(month, current_date) group by 1 order by 2 desc;
Créditos utilizados ao longo do tempo por cada warehouse em sua conta (mês até a data):
select start_time::date as usage_date, warehouse_name, sum(credits_used) as total_credits_used from warehouse_metering_history where start_time >= date_trunc(month, current_date) group by 1,2 order by 2,1;
Exemplos: uso do armazenamento de dados¶
Terabytes faturáveis armazenados em sua conta ao longo do tempo:
select date_trunc(month, usage_date) as usage_month , avg(storage_bytes + stage_bytes + failsafe_bytes) / power(1024, 4) as billable_tb from storage_usage group by 1 order by 1;
Exemplos: totais de consultas de usuário e tempos de execução¶
Total de trabalhos executados em sua conta (mês até a data):
select count(*) as number_of_jobs from query_history where start_time >= date_trunc(month, current_date);
Total de trabalhos executados por cada warehouse em sua conta (mês até a data):
select warehouse_name, count(*) as number_of_jobs from query_history where start_time >= date_trunc(month, current_date) group by 1 order by 2 desc;
Tempo médio de execução da consulta por usuário (mês até a data):
select user_name, avg(execution_time) as average_execution_time from query_history where start_time >= date_trunc(month, current_date) group by 1 order by 2 desc;
Tempo médio de execução da consulta por tipo de consulta e tamanho do warehouse (mês até a data):
select query_type, warehouse_size, avg(execution_time) as average_execution_time from query_history where start_time >= date_trunc(month, current_date) group by 1,2 order by 3 desc;
Exemplos: obter uma contagem de consultas para cada evento de login¶
Junte colunas de LOGIN_HISTORY, QUERY_HISTORY e SESSIONS para obter uma contagem de consultas para cada evento de login de usuário.
Nota
A exibição SESSIONS registra informações a partir de 20-21 julho de 2020, portanto o resultado da consulta conterá apenas informações sobrepostas para cada uma das três exibições a partir dessa data.
select l.user_name, l.event_timestamp as login_time, l.client_ip, l.reported_client_type, l.first_authentication_factor, l.second_authentication_factor, count(q.query_id) from snowflake.account_usage.login_history l join snowflake.account_usage.sessions s on l.event_id = s.login_event_id join snowflake.account_usage.query_history q on q.session_id = s.session_id group by 1,2,3,4,5,6 order by l.user_name ;