Catégories :

Information Schema , Fonctions de table

QUERY_HISTORY , QUERY_HISTORY_BY_*

La famille QUERY_HISTORY de fonctions de table peut être utilisée pour interroger l’historique de requêtes de Snowflake selon différentes dimensions :

  • QUERY_HISTORY renvoie les requêtes dans un intervalle de temps spécifié.

  • QUERY_HISTORY_BY_SESSION renvoie les requêtes dans une session et un intervalle de temps spécifiés.

  • QUERY_HISTORY_BY_USER renvoie les requêtes soumises par un utilisateur spécifié dans un intervalle de temps spécifié.

  • QUERY_HISTORY_BY_WAREHOUSE renvoie les requêtes exécutées par un entrepôt spécifié dans un intervalle de temps spécifié.

Chaque fonction est optimisée pour les requêtes au sein de la dimension spécifiée. Les résultats peuvent être filtrés à l’aide de prédicats SQL.

Note

Ces fonctions renvoient l’activité des requêtes au cours des 7 derniers jours.

Voir aussi :

Syntaxe

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

Arguments

Tous les arguments sont facultatifs.

END_TIME_RANGE_START => constant_expr , . END_TIME_RANGE_END => constant_expr

Intervalle de temps (au format TIMESTAMP_LTZ), au cours des 7 derniers jours, pendant lequel la requête a été exécutée :

  • Si END_TIME_RANGE_END n’est pas spécifié, la fonction renvoie toutes les requêtes, y compris celles qui sont toujours en cours d’exécution.

  • Si END_TIME_RANGE_END est CURRENT_TIMESTAMP, la fonction renvoie uniquement les requêtes terminées.

Si l’intervalle de temps ne tombe pas dans les 7 derniers jours, une erreur est renvoyée.

Note

Si aucune heure de début ou de fin n’est spécifiée, les requêtes les plus récentes sont renvoyées, jusqu’à la limite spécifiée.

SESSION_ID => constant_expr

S’applique uniquement à QUERY_HISTORY_BY_SESSION

L’identificateur numérique d’une session ou CURRENT_SESSION Seules les requêtes de la session spécifiée sont renvoyées.

Par défaut : CURRENT_SESSION

USER_NAME => 'string'

S’applique uniquement à QUERY_HISTORY_BY_USER

Une chaîne de caractères spécifiant un nom d’utilisateur ou CURRENT_USER Seules les requêtes exécutées par l’utilisateur spécifié sont renvoyées. Notez que le nom d’utilisateur doit être entre guillemets simples. De plus, si le nom de connexion contient des espaces, des caractères en majuscules et minuscules ou des caractères spéciaux, le nom doit être entre guillemets doubles à l’intérieur des guillemets simples (p. ex. '"User 1"' vs 'user1').

Par défaut : CURRENT_USER

WAREHOUSE_NAME => 'string'

S’applique uniquement à QUERY_HISTORY_BY_WAREHOUSE

Une chaîne spécifiant un nom d’entrepôt ou CURRENT_WAREHOUSE. Seules les requêtes exécutées par cet entrepôt sont renvoyées. Notez que le nom de l’entrepôt doit être entre guillemets simples. De plus, si le nom de l’entrepôt contient des espaces, des caractères en majuscules et minuscules ou des caractères spéciaux, le nom doit être entre guillemets doubles à l’intérieur des guillemets simples (p. ex. '"My Warehouse"' vs 'mywarehouse').

Par défaut : CURRENT_WAREHOUSE

RESULT_LIMIT => num

Un nombre spécifiant le nombre maximum de lignes renvoyées par la fonction :

Si le nombre de lignes correspondantes est supérieur à cette limite, les requêtes avec l’heure de fin la plus récente (ou celles qui sont toujours en cours d’exécution) sont renvoyées, jusqu’à la limite spécifiée.

Plage : de 1 à 10000

Par défaut : 100.

Notes sur l’utilisation

  • Renvoie les requêtes exécutées par l’utilisateur actuel. Renvoie également les requêtes exécutées par n’importe quel utilisateur lorsque le rôle d’exécution, ou un rôle supérieur dans une hiérarchie, possède le privilège MONITOR ou OPERATE sur les entrepôts dans lesquels les requêtes ont été exécutées. Pour plus d’informations, voir Privilèges de l’entrepôt virtuel.

  • Lors de l’appel d’une fonction de la table Information Schema, la session doit avoir un schéma INFORMATION_SCHEMA en cours d’utilisation ou le nom de la fonction doit être complètement qualifié. Pour plus de détails, voir Schéma d’information de Snowflake.

  • Les valeurs des colonnes EXTERNAL_FUNCTION_TOTAL_INVOCATIONS, EXTERNAL_FUNCTION_TOTAL_SENT_ROWS, EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS, EXTERNAL_FUNCTION_TOTAL_SENT_BYTES et EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES sont affectées par de nombreux facteurs, notamment :

    • Le nombre de fonctions externes dans l’instruction SQL.

    • Le nombre de lignes par lot envoyées à chaque service distant.

    • Le nombre de tentatives en raison d’erreurs transitoires (par exemple, parce qu’une réponse n’a pas été reçue dans le délai prévu).

Sortie

La fonction renvoie les colonnes suivantes :

Nom de la colonne

Type de données

Description

QUERY_ID

TEXT

L’identifiant unique de l’instruction.

QUERY_TEXT

TEXT

Texte de l’instruction SQL.

DATABASE_NAME

TEXT

Base de données spécifiée dans le contexte de la requête lors de la compilation.

SCHEMA_NAME

TEXT

Schéma spécifié dans le contexte de la requête lors de la compilation.

QUERY_TYPE

TEXT

DML, requête, etc. Si la requête est en cours d’exécution ou a échoué, le type de requête peut être UNKNOWN.

SESSION_ID

NUMBER

Session qui a exécuté l’instruction.

USER_NAME

TEXT

Utilisateur qui a émis la requête.

ROLE_NAME

TEXT

Rôle actif dans la session au moment de la requête.

WAREHOUSE_NAME

TEXT

Entrepôt sur lequel la requête a été exécutée, le cas échéant.

WAREHOUSE_SIZE

TEXT

Taille de l’entrepôt lorsque cette instruction est exécutée.

WAREHOUSE_TYPE

TEXT

Type de l’entrepôt lorsque cette instruction est exécutée.

CLUSTER_NUMBER

NUMBER

Le cluster (dans un entrepôt multi-cluster) sur lequel cette instruction a été exécutée.

QUERY_TAG

TEXT

Balise de requête définie pour cette instruction via le paramètre de session QUERY_TAG.

EXECUTION_STATUS

TEXT

Statut d’exécution de la requête : resuming_warehouse (entrepôt en cours), running (en cours d’exécution), queued (mise en file d’attente), blocked (bloquée), success (exécutée avec succès), failed_with_error (échec avec erreur), ou failed_with_incident (échec avec incident).

ERROR_CODE

NUMBER

Code d’erreur, si la requête a renvoyé une erreur

ERROR_MESSAGE

TEXT

Message d’erreur si la requête a renvoyé une erreur

START_TIME

TIMESTAMP_LTZ

Heure de début de l’instruction

END_TIME

TIMESTAMP_LTZ

Heure de fin de l’instruction. Si la requête est toujours en cours d’exécution, END_TIME est l’horodatage de l’époque UNIX (« 1970-01-01 00:00:00 »), ajusté pour le fuseau horaire local. Par exemple, pour l’heure normale du Pacifique, il s’agirait de « 1969-12-31 16:00:00.000 -0800 ».

TOTAL_ELAPSED_TIME

NUMBER

Temps écoulé (en millisecondes)

BYTES_SCANNED

NUMBER

Nombre d’octets analysés par cette instruction.

ROWS_PRODUCED

NUMBER

Nombre de lignes produites par cette instruction.

COMPILATION_TIME

NUMBER

Temps de compilation (en millisecondes)

EXECUTION_TIME

NUMBER

Temps d’exécution (en millisecondes)

QUEUED_PROVISIONING_TIME

NUMBER

Temps (en millisecondes) passé dans la file d’attente de l’entrepôt à attendre que les ressources de calcul de l’entrepôt soient provisionnées en raison de la création, de la reprise ou du redimensionnement de l’entrepôt.

QUEUED_REPAIR_TIME

NUMBER

Temps (en millisecondes) passé dans la file d’attente de l’entrepôt à attendre que les ressources de calcul de l’entrepôt soient réparées.

QUEUED_OVERLOAD_TIME

NUMBER

Temps (en millisecondes) passé dans la file d’attente d’entrepôt en raison de la surcharge de l’entrepôt par la charge de la requête actuelle.

TRANSACTION_BLOCKED_TIME

NUMBER

Temps (en millisecondes) passé à être bloquée par un concurrent DML.

OUTBOUND_DATA_TRANSFER_CLOUD

TEXT

Fournisseur cloud cible pour les instructions qui déchargent des données vers une autre région et/ou un autre cloud.

OUTBOUND_DATA_TRANSFER_REGION

TEXT

Région cible pour les instructions qui déchargent des données dans une autre région et / ou cloud.

OUTBOUND_DATA_TRANSFER_BYTES

NUMBER

Nombre d’octets transférés dans les instructions qui déchargent des données vers une autre région et/ou un autre Cloud.

INBOUND_DATA_TRANSFER_CLOUD

TEXT

Fournisseur de Cloud source pour les instructions qui chargent des données provenant d’une autre région et/ou d’un Cloud.

INBOUND_DATA_TRANSFER_REGION

TEXT

Région source pour les instructions qui chargent des données d’une autre région et/ou d’un autre Cloud.

INBOUND_DATA_TRANSFER_BYTES

NUMBER

Nombre d’octets transférés dans des instructions qui chargent des données d’une autre région et/ou d’un autre Cloud.

LIST_EXTERNAL_FILE_TIME

NUMBER

Temps (en millisecondes) consacré à la liste des fichiers externes.

CREDITS_USED_CLOUD_SERVICES

NUMBER

Nombre de crédits utilisés pour les services Cloud.

RELEASE_VERSION

TEXT

Version de publication au format major_release.minor_release.patch_release.

EXTERNAL_FUNCTION_TOTAL_INVOCATIONS

NUMBER

Nombre total de fois que cette requête a appelé des services distants. Pour des détails importants, voir les notes d’utilisation.

EXTERNAL_FUNCTION_TOTAL_SENT_ROWS

NUMBER

Nombre total de lignes envoyées par cette requête dans tous les appels à tous les services distants.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS

NUMBER

Nombre total de lignes que cette requête a reçues de tous les appels vers tous les services distants.

EXTERNAL_FUNCTION_TOTAL_SENT_BYTES

NUMBER

Nombre total d’octets que cette requête a envoyés dans tous les appels à tous les services distants.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES

NUMBER

Nombre total d’octets que cette requête a reçus de tous les appels vers tous les services distants.

IS_CLIENT_GENERATED_STATEMENT

BOOLEAN

Indique si la requête a été générée par le client.

QUERY_HASH

TEXT

La valeur de hachage calculée sur la base du texte SQL canonisé. 1

QUERY_HASH_VERSION

NUMBER

La version de la logique utilisée pour calculer QUERY_HASH. 1

QUERY_PARAMETERIZED_HASH

TEXT

La valeur de hachage calculée à partir de la requête paramétrée. 1

QUERY_PARAMETERIZED_HASH_VERSION

NUMBER

La version de la logique utilisée pour calculer QUERY_PARAMETERIZED_HASH. 1

1(1,2,3,4)

Cette colonne n’est présente que lorsque le bundle de changements de comportement 2023_06 est activé. Cette colonne fait partie de la fonction de hachage de la requête.

Les valeurs potentielles de la colonne QUERY_TYPE comprennent :

  • 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

Exemples

Récupère au maximum les 100 dernières requêtes exécutées dans la session en cours :

select *
from table(information_schema.query_history_by_session())
order by start_time;
Copy

Récupère au maximum les 100 dernières requêtes exécutées par l’utilisateur actuel (ou par chaque utilisateur d’un entrepôt pour lequel l’utilisateur actuel a le privilège MONITOR) :

select *
from table(information_schema.query_history())
order by start_time;
Copy

Récupère au maximum les 100 dernières requêtes exécutées au cours de l’heure écoulée par l’utilisateur actuel (ou exécutées par chaque utilisateur sur chaque entrepôt pour lequel l’utilisateur actuel a le privilège MONITOR) :

select *
from table(information_schema.query_history(dateadd('hours',-1,current_timestamp()),current_timestamp()))
order by start_time;
Copy

Récupère toutes les requêtes exécutées par l’utilisateur actuel (ou exécutées par chaque utilisateur sur chaque entrepôt pour lequel l’utilisateur actuel a le privilège MONITOR) dans un bloc de 30 minutes spécifique situé durant les 7 derniers jours :

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