- Catégories :
QUERY_HISTORY , QUERY_HISTORY_BY_*¶
Vous pouvez utiliser la famille de fonctions de table QUERY_HISTORY pour interroger l’historique des 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 :
Vue QUERY_HISTORY (Account Usage) Surveillance de l’activité des requêtes avec l’historique des requêtes (tableau de bord Snowsight)
Syntaxe¶
QUERY_HISTORY(
[ END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_SESSION(
[ SESSION_ID => <constant_expr> ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_USER(
[ USER_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
QUERY_HISTORY_BY_WAREHOUSE(
[ WAREHOUSE_NAME => '<string>' ]
[, END_TIME_RANGE_START => <constant_expr> ]
[, END_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <num> ]
[, INCLUDE_CLIENT_GENERATED_STATEMENT => <boolean_expr> ] )
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'
). Vous ne pouvez pas spécifierSYSTEM
(USER_NAME =>'SYSTEM'
), qui est un service d’arrière-plan plutôt qu’un utilisateur. Toutefois, vous pouvez filtrer suruser_name='SYSTEM'
lorsque vous exécutez des requêtes sur les fonctions de table QUERY_HISTORY.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
.INCLUDE_CLIENT_GENERATED_STATEMENT => 'boolean_expr'
Indique si les instructions générées par le client sont incluses dans les requêtes de fonctions de table (compte tenu de la valeur de la colonne
is_client_generated_statement
).Par défaut :
FALSE
.Le site ACCOUNT_USAGE Vue QUERY_HISTORY contient également une colonne
is_client_generated_statement
, mais les requêtes portant sur cette vue renvoient toutes les instructions, qu’elles soient ou non générées par le client. Si nécessaire, vous pouvez filtrer le résultat de la requête.
Notes sur l’utilisation¶
Renvoie les requêtes exécutées par l’utilisateur actuel. Retourne é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, dispose de l’un ou l’autre des privilèges suivants :
Le privilège MONITOR ou OPERATE sur les entrepôts gérés par l’utilisateur où les requêtes ont été exécutées.
Le privilège MONITOR ou OPERATE sur la tâche. Exception : si la tâche exécute une procédure stockée de droit propriétaire ou UDF, le rôle requiert au moins le privilège MONITOR sur l’entrepôt sur lequel la tâche s’est exécutée pour voir la requête de la procédure stockée et la requête UDF.
Le privilège MONITOR EXECUTION sur le compte dans lequel réside la tâche.
Exceptions : ni les procédures stockées ni les fonctions définies par l’utilisateur (UDFs) ne peuvent exécuter cette requête.
Pour plus d’informations, voir Privilèges de l’entrepôt virtuel.
Lorsque vous appelez une fonction de table Information Schema, la session doit utiliser le INFORMATION_SCHEMA ou le nom de la fonction doit être entièrement qualifié. Pour plus d’informations, 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
etexternal_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).
Les requêtes annulées sont identifiées par leur texte
error_message
(SQL execution canceled
) et non par leur valeurexecution_status
.
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 |
---|---|---|
|
VARCHAR |
L’identifiant unique de l’instruction. |
|
VARCHAR |
Texte de l’instruction SQL. |
|
VARCHAR |
Base de données spécifiée dans le contexte de la requête lors de la compilation. |
|
VARCHAR |
Schéma spécifié dans le contexte de la requête lors de la compilation. |
|
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. |
|
NUMBER |
Session qui a exécuté l’instruction. |
|
VARCHAR |
Utilisateur qui a émis la requête. |
|
VARCHAR |
Le type d’utilisateur qui exécute la requête. C’est la même chose que la colonne |
|
VARCHAR |
Lorsque la valeur dans la colonne |
|
VARCHAR |
Lorsque la valeur dans la colonne |
|
VARCHAR |
Rôle actif dans la session au moment de la requête. |
|
VARCHAR |
Entrepôt sur lequel la requête a été exécutée, le cas échéant. |
|
VARCHAR |
Taille de l’entrepôt lorsque cette instruction est exécutée. |
|
VARCHAR |
Type de l’entrepôt lorsque cette instruction est exécutée. |
|
NUMBER |
Le cluster (dans un entrepôt multi-cluster) sur lequel cette instruction a été exécutée. |
|
VARCHAR |
Balise de requête définie pour cette instruction via le paramètre de session QUERY_TAG. |
|
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). |
|
NUMBER |
Code d’erreur, si la requête a renvoyé une erreur |
|
VARCHAR |
Message d’erreur si la requête a renvoyé une erreur |
|
TIMESTAMP_LTZ |
Heure de début de l’instruction |
|
TIMESTAMP_LTZ |
Heure de fin de l’instruction. Si la requête est toujours en cours d’exécution, |
|
NUMBER |
Temps écoulé (en millisecondes) |
|
NUMBER |
Nombre d’octets analysés par cette instruction. |
|
NUMBER |
Nombre de lignes produites par cette instruction. |
|
NUMBER |
Temps de compilation (en millisecondes) |
|
NUMBER |
Temps d’exécution (en millisecondes) |
|
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. |
|
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. |
|
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. |
|
NUMBER |
Temps (en millisecondes) passé à être bloquée par un concurrent DML. |
|
VARCHAR |
Fournisseur cloud cible pour les instructions qui déchargent des données vers une autre région et/ou un autre cloud. |
|
VARCHAR |
Région cible pour les instructions qui déchargent des données dans une autre région et / ou cloud. |
|
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. |
|
VARCHAR |
Fournisseur de Cloud source pour les instructions qui chargent des données provenant d’une autre région et/ou d’un Cloud. |
|
VARCHAR |
Région source pour les instructions qui chargent des données d’une autre région et/ou d’un autre Cloud. |
|
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. |
|
NUMBER |
Temps (en millisecondes) consacré à la liste des fichiers externes. |
|
NUMBER |
Nombre de crédits utilisés pour les services Cloud. |
|
VARCHAR |
Version de publication au format |
|
NUMBER |
Nombre total de fois que cette requête a appelé des services distants. Pour des détails importants, voir les notes d’utilisation. |
|
NUMBER |
Nombre total de lignes envoyées par cette requête dans tous les appels à tous les services distants. |
|
NUMBER |
Nombre total de lignes que cette requête a reçues de tous les appels vers tous les services distants. |
|
NUMBER |
Nombre total d’octets que cette requête a envoyés dans tous les appels à tous les services distants. |
|
NUMBER |
Nombre total d’octets que cette requête a reçus de tous les appels vers tous les services distants. |
|
BOOLEAN |
Indique si la requête a été générée par le client. |
|
VARCHAR |
La valeur de hachage calculée sur la base du texte SQL canonisé. |
|
NUMBER |
La version de la logique utilisée pour calculer |
|
VARCHAR |
La valeur de hachage calculée à partir de la requête paramétrée. |
|
NUMBER |
La version de la logique utilisée pour calculer |
|
NUMBER |
ID de la transaction qui contient l’instruction ou |
|
NUMBER |
Nombre d’octets analysés par le service d’accélération des requêtes. |
|
NUMBER |
Nombre de partitions analysées par le service d’accélération des requêtes. |
|
NUMBER |
Facteur d’échelle de limite supérieure dont aurait bénéficié une requête. |
|
NUMBER |
Octets écrits dans un objet de résultat. Par exemple, |
|
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 |
|
NUMBER |
Nombre de lignes insérées par la requête. |
|
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. |
|
VARCHAR |
Erreur ayant entraîné une nouvelle tentative de requête. En l’absence de nouvelle tentative de requête, le champ est NULL. Pour plus d’informations, voir Colonnes de nouvelles tentatives de requête. |
|
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;
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;
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;
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écifié 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')));
Récupère le nombre d’instructions générées par le client qui ont été exécutées sur un entrepôt nommé my_xsmall_wh
:
SELECT COUNT(*)
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_WAREHOUSE(
WAREHOUSE_NAME => 'my_xsmall_wh',
INCLUDE_CLIENT_GENERATED_STATEMENT => TRUE));