Account Usage

Snowflake fournit des métadonnées d’objets du dictionnaire de données, ainsi que des données historiques d’utilisation, pour votre compte via une base de données partagée nommée SNOWFLAKE.

Dans ce chapitre :

Qu’est-ce que la base de données SNOWFLAKE ?

SNOWFLAKE est une base de données partagée en lecture seule, définie par le système et fournie par Snowflake. La base de données est automatiquement importée dans chaque compte à partir d’une section nommée ACCOUNT_USAGE. La base de données SNOWFLAKE est un exemple d’utilisation par Snowflake de Secure Data Secure Data Sharing pour fournir des métadonnées d’objet et d’autres mesures d’utilisation pour votre compte.

La base de données SNOWFLAKE contient deux schémas (également en lecture seule). Chaque schéma contient un ensemble de vues :

ACCOUNT_USAGE

Vues qui affichent les métadonnées de l’objet et les métriques d’utilisation pour votre compte.

En général, ces vues reflètent les vues et les fonctions de table correspondantes dans le Schéma d’information Snowflake, mais avec les différences suivantes :

  • Enregistrements pour les objets déposés inclus dans chaque vue.

  • Durée de conservation plus longue pour les données historiques d’utilisation.

  • Latence des données.

Pour plus de détails, voir Différences entre Account Usage et Information Schema (dans ce chapitre). Pour plus de détails sur chaque vue, voir Vues ACCOUNT_USAGE (dans ce chapitre).

READER_ACCOUNT_USAGE

Vues qui affichent les métadonnées de l’objet et les métriques d’utilisation pour tous les comptes lecteurs qui ont été créés pour votre compte (en tant que fournisseur de Secure Data Sharing).

Ces vues sont un petit sous-ensemble des vues ACCOUNT_USAGE qui s’appliquent aux comptes de lecteurs, à l’exception de la vue RESOURCE_MONITORS, qui n’est disponible qu’en format READER_ACCOUNT_USAGE. De plus, chaque vue de ce schéma contient une colonne READER_ACCOUNT_NAME supplémentaire pour filtrer les résultats par compte de lecteur.

Pour plus de détails sur chaque vue, voir READER_ACCOUNT_USAGE Vues (dans ce chapitre).

Notez que ces vues sont vides si aucun compte lecteur n’a été créé pour votre compte.

Les vues des schémas peuvent être interrogées de la même manière que n’importe quelle autre vue dans Snowflake :

Notez que la base de données SNOWFLAKE contient un troisième schéma, INFORMATION_SCHEMA, qui est automatiquement créé dans toutes les bases de données. Dans les bases de données partagées, ce schéma ne sert à rien et peut être ignoré.

Note

Par défaut, seuls les administrateurs de compte (utilisateurs ayant le rôle ACCOUNTADMIN) peuvent accéder à la base de données SNOWFLAKE et aux schémas de la base de données, ou effectuer des requêtes sur les vues ; cependant, des privilèges sur la base de données peuvent être accordés à d’autres rôles dans votre compte pour permettre aux autres utilisateurs d’accéder à ces objets. Pour plus de détails, voir Activation d’Account Usage pour d’autres rôles (dans ce chapitre).

Différences entre l’utilisation du compte et le schéma d’information

Les vues d’utilisation du compte et les vues correspondantes (ou fonctions de tables) dans le schéma d’information utilisent des structures et des conventions d’appellation identiques, mais avec quelques différences importantes, comme le décrit ce chapitre.

Différence

Utilisation du compte

Information Schema

Inclut les objets détruits

Oui

Non

Latence des données

Entre 45 minutes et 3 heures (varie selon la vue)

Aucun

Conservation des données historiques

1 an

Entre 7 jours et 6 mois (varie selon la vue/la fonction de table)

Pour plus de détails, voir les sections suivantes.

Enregistrements d’objets détruits

Les vues d’utilisation de compte comprennent des enregistrements pour tous les objets qui ont été détruits. Une colonne DELETED supplémentaire affiche l’horodatage lorsque l’objet a été détruit.

En outre, comme les objets peuvent être détruits et recréés avec le même nom, les vues d’utilisation des comptes comprennent des colonnes ID pour différencier les enregistrements d’objets portant le même nom, qui affichent les IDs internes générés et affectés à chaque enregistrement par le système, le cas échéant.

Latence des données

En raison du processus d’extraction des données de l’entrepôt interne de métadonnées de Snowflake, les vues Account Usage ont une certaine latence naturelle :

  • Pour la plupart des vues, la latence est de 2 heures (120 minutes).

  • Pour les autres vues, la latence varie entre 45 minutes et 3 heures.

Pour plus de détails, voir la liste des vues pour chaque schéma (dans cette rubrique). Notez également qu’il s’agit de longueurs maximales ; la latence réelle d’une vue donnée au moment où la vue est interrogée peut être inférieure.

En revanche, les vues/fonctions de la table dans le Schéma d’information n’ont pas de latence.

Conservation des données historiques

Certaines des vues d’utilisation du compte fournissent des métriques historiques d’utilisation. La période de conservation limite pour ces vues est d’un an (365 jours).

En revanche, les vues correspondantes et les fonctions de tables dans le Schéma d’information ont des périodes de coupure beaucoup plus courtes, allant de 7 jours à 6 mois, selon la vue.

Vues ACCOUNT_USAGE

Le schéma ACCOUNT_USAGE contient les vues suivantes :

Vue

Type

Latence [1]

Remarques

AUTOMATIC_CLUSTERING_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

COLUMNS

Objet

90 minutes

COPY_HISTORY

Historique

2 heures

Données conservées pendant 1 an.

DATABASES

Objet

3 heures

DATABASE_STORAGE_USAGE_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

DATA_TRANSFER_HISTORY

Historique

2 heures

Données conservées pendant 1 an.

FILE_FORMATS

Objet

2 heures

FUNCTIONS

Objet

2 heures

GRANTS_TO_ROLES

Objet

2 heures

GRANTS_TO_USERS

Objet

2 heures

LOAD_HISTORY

Historique

90 minutes

Données conservées pendant 1 an.

LOGIN_HISTORY

Historique

2 heures

Données conservées pendant 1 an.

MATERIALIZED_VIEW_REFRESH_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

METERING_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

METERING_DAILY_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

PIPES

Objet

2 heures

PIPE_USAGE_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

REPLICATION_USAGE_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

QUERY_HISTORY

Historique

45 minutes

Données conservées pendant 1 an.

REFERENTIAL_CONSTRAINTS

Objet

2 heures

ROLES

Objet

2 heures

SCHEMATA

Objet

2 heures

SEARCH_OPTIMIZATION_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

SEQUENCES

Objet

2 heures

SESSIONS

Historique

3 heures

Données conservées pendant 1 an.

STAGES

Objet

2 heures

STAGE_STORAGE_USAGE_HISTORY

Historique

2 heures

Données conservées pendant 1 an.

STORAGE_USAGE

Historique

2 heures

Utilisation combinée de toutes les tables de la base de données et des zones de préparation internes. Données conservées pendant 1 an.

TABLES

Objet

90 minutes

TABLE_CONSTRAINTS

Objet

2 heures

TABLE_STORAGE_METRICS

Objet

90 minutes

USERS

Objet

2 heures

VIEWS

Objet

90 minutes

WAREHOUSE_LOAD_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

WAREHOUSE_METERING_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

[1] Tous les temps de latence sont approximatifs. Dans certains cas, la latence réelle peut être inférieure.

Vues READER_ACCOUNT_USAGE

Le schéma READER_ACCOUNT_USAGE contient les vues suivantes :

Vue

Type

Latence [1]

Remarques

LOGIN_HISTORY

Historique

2 heures

Données conservées pendant 1 an.

QUERY_HISTORY

Historique

45 minutes

Données conservées pendant 1 an.

RESOURCE_MONITORS

Objet

2 heures

STORAGE_USAGE

Historique

2 heures

Utilisation combinée de toutes les tables de la base de données et des zones de préparation internes. Données conservées pendant 1 an.

WAREHOUSE_METERING_HISTORY

Historique

3 heures

Données conservées pendant 1 an.

[1] Tous les temps de latence sont approximatifs. Dans certains cas, la latence réelle peut être inférieure.

Activation de l’utilisation du compte pour d’autres rôles

Par défaut, la base de données SNOWFLAKE n’est disponible que pour le rôle ACCOUNTADMIN.

Pour permettre à d’autres rôles d’accéder à la base de données et aux schémas et d’interroger les vues, un utilisateur ayant le rôle ACCOUNTADMIN doit accorder le privilège de partage de données suivant aux rôles souhaités :

IMPORTED PRIVILEGES

Par exemple :

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 * FROM snowflake.account_usage.databases;

Interrogation des vues d’utilisation du compte

Cette section fournit des exemples de requêtes typiques/utiles utilisant les vues dans le schéma ACCOUNT_USAGE.

Note

Ces exemples supposent que la base de données SNOWFLAKE et le schéma ACCOUNT_USAGE sont utilisés pour la session en cours. Les exemples supposent également que le rôle ACCOUNTADMIN (ou un rôle ayant obtenu des PRIVILEGES IMPORTED pour la base de données) est utilisé. S’ils ne sont pas utilisés, exécutez les commandes suivantes avant d’exécuter les requêtes dans les exemples :

USE ROLE ACCOUNTADMIN;

USE SCHEMA snowflake.account_usage;

Exemples : métriques de connexion utilisateur

Nombre moyen de secondes entre les tentatives de connexion échouées, par utilisateur (depuis le début du mois) :

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;

Échec de connexions, par utilisateur (depuis le début du mois) :

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;

Echec des connexions par utilisateur et client connecté (depuis le début du mois) :

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;

Exemple : utilisation du crédit d’entrepôt

Crédits utilisés par chaque entrepôt de votre compte (depuis le début du mois) :

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édits utilisés au fil du temps par chaque entrepôt de votre compte (depuis le début du mois) :

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;

Exemples : utilisation du stockage de données

Téraoctets facturables stockés dans votre compte au fil du temps :

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;

Exemples : totaux de requêtes utilisateur et temps d’exécution

Total des tâches exécutées sur votre compte (depuis le début du mois) :

select count(*) as number_of_jobs
from query_history
where start_time >= date_trunc(month, current_date);

Total des tâches exécutées par chaque entrepôt de votre compte (depuis le début du mois) :

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;

Temps moyen d’exécution des requêtes par utilisateur (depuis le début du mois) :

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;

Temps moyen d’exécution des requêtes par type de requête et taille de l’entrepôt (depuis le début du mois) :

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;

Exemples : obtenir un nombre de requêtes pour chaque événement de connexion

Joignez les colonnes de LOGIN_HISTORY, QUERY_HISTORY et SESSIONS pour obtenir un nombre de requêtes pour chaque événement de connexion utilisateur.

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
;