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.

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).

Colonnes de nouvelles tentatives des requêtes

Il se peut qu’une requête doive être relancée une ou plusieurs fois pour aboutir. Plusieurs causes peuvent être à l’origine d’une nouvelle tentative d’interrogation. Certaines de ces causes peuvent donner lieu à des actions, c’est-à-dire qu’un utilisateur peut apporter des modifications afin de réduire ou d’éliminer les nouvelles tentatives de requêtes pour une requête spécifique. Par exemple, si une requête est relancée en raison d’une erreur de mémoire, la modification des paramètres de l’entrepôt peut résoudre le problème.

Certaines nouvelles tentatives de requête sont dues à un défaut sur lequel il n’est pas possible d’agir. En d’autres termes, il n’y a pas de changement que l’utilisateur puisse faire pour empêcher la réitération de la requête. Par exemple, une panne de réseau peut entraîner une nouvelle tentative de requête. Dans ce cas, aucune modification de la requête ou de l’entrepôt qui l’exécute ne peut empêcher la réitération de la requête.

Les colonnes QUERY_RETRY_TIME, QUERY_RETRY_CAUSE et FAULT_HANDLING_TIME peuvent vous aider à optimiser les requêtes qui sont relancées et à mieux comprendre les fluctuations des performances des requêtes.

Sortie

La fonction renvoie les colonnes suivantes :

Nom de la colonne

Type de données

Description

QUERY_ID

VARCHAR

L’identifiant unique de l’instruction.

QUERY_TEXT

VARCHAR

Texte de l’instruction SQL.

DATABASE_NAME

VARCHAR

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

SCHEMA_NAME

VARCHAR

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

QUERY_TYPE

VARCHAR

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

VARCHAR

Utilisateur qui a émis la requête.

ROLE_NAME

VARCHAR

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

WAREHOUSE_NAME

VARCHAR

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

WAREHOUSE_SIZE

VARCHAR

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

WAREHOUSE_TYPE

VARCHAR

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

VARCHAR

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

EXECUTION_STATUS

VARCHAR

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

VARCHAR

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

VARCHAR

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

VARCHAR

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

VARCHAR

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

VARCHAR

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 lors d’une opération de réplication à partir d’un autre compte. Le compte source peut se trouver dans la même région ou dans une région différente du compte actuel.

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

VARCHAR

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

VARCHAR

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

QUERY_HASH_VERSION

NUMBER

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

QUERY_PARAMETERIZED_HASH

VARCHAR

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

QUERY_PARAMETERIZED_HASH_VERSION

NUMBER

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

TRANSACTION_ID

NUMBER

ID de la transaction qui contient l’instruction ou 0 si l’instruction n’est pas exécutée dans une transaction.

QUERY_ACCELERATION_BYTES_SCANNED

NUMBER

Nombre d’octets analysés par le service d’accélération des requêtes.

QUERY_ACCELERATION_PARTITIONS_SCANNED

NUMBER

Nombre de partitions analysées par le service d’accélération des requêtes.

QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

NUMBER

Facteur d’échelle de limite supérieure dont aurait bénéficié une requête.

BYTES_WRITTEN_TO_RESULT

NUMBER

Octets écrits dans un objet de résultat. Par exemple, select * from ... produira un ensemble de résultats sous forme de tableau représentant chaque champ de la sélection. . . En général, l’objet des résultats représente tout ce qui est produit comme résultat de la requête, et BYTES_WRITTEN_TO_RESULT représente la taille du résultat renvoyé.

ROWS_WRITTEN_TO_RESULT

NUMBER

Nombre de lignes écrites dans un objet de résultat. Pour CREATE TABLE AS SELECT (CTAS) et toutes les opérations DML, ce résultat est 1.

ROWS_INSERTED

NUMBER

Nombre de lignes insérées par la requête.

QUERY_RETRY_TIME

NUMBER

Temps d’exécution total (en millisecondes) pour les tentatives d’interrogation causées par des erreurs pouvant donner lieu à une action. Pour plus d’informations, voir Colonnes de nouvelles tentatives de requête.

QUERY_RETRY_CAUSE

VARIANT

Tableau de messages d’erreur pour les erreurs pouvant donner lieu à une action. Le tableau contient un message d’erreur pour chaque nouvelle tentative d’interrogation. S’il n’y a pas de nouvelle tentative d’interrogation, la table est vide. Pour plus d’informations, voir Colonnes de nouvelles tentatives de requête.

FAULT_HANDLING_TIME

NUMBER

Temps d’exécution total (en millisecondes) pour les tentatives de requêtes causées par des erreurs qui ne peuvent pas donner lieu à des actions. Pour plus d’informations, voir Colonnes de nouvelles tentatives de 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