- Schémas :
Vue QUERY_HISTORY¶
Cette vue Account Usage peut être utilisée pour interroger l’historique des requêtes Snowflake selon différentes dimensions (plage de temps, session, utilisateur, entrepôt, etc.) au cours des 365 derniers jours (1 an).
La vue est disponible dans les schémas ACCOUNT_USAGE et READER_ACCOUNT_USAGE avec les différences suivantes :
Les colonnes suivantes sont disponibles uniquement dans la vue du compte de lecteur :
READER_ACCOUNT_NAME
READER_ACCOUNT_DELETED_ON
Alternativement, vous pouvez appeler la fonction de table Information Schema, également nommée QUERY_HISTORY ; notez cependant que la fonction de table limite les résultats à l’activité des 7 derniers jours, contre 365 jours pour la vue Account Usage. Voir la description de la fonction QUERY_HISTORY.
Voir aussi :
Surveillance de l’activité des requêtes avec l’historique des requêtes (tableau de bord Snowsight)
Colonnes¶
La colonne Disponible uniquement dans les vues d’utilisation du compte de lecteur de la table suivante indique si la colonne QUERY_HISTORY est disponible dans le schéma READER_ACCOUNT_USAGE.
Nom de la colonne |
Type de données |
Description |
Disponible uniquement dans les vues d’utilisation du compte de lecteur |
---|---|---|---|
|
VARCHAR |
Nom du compte de lecteur dans lequel l’instruction SQL a été exécutée. |
✔ |
|
VARCHAR |
Identificateur interne / généré par le système pour l’instruction SQL. |
✔ |
|
VARCHAR |
Texte de l’instruction SQL. La limite est de 100 000 caractères. Les instructions SQL contenant plus de 100 000 caractères seront tronquées. |
|
|
NUMBER |
Identificateur interne/généré par le système pour la base de données utilisée. |
✔ |
|
VARCHAR |
Base de données spécifiée dans le contexte de la requête lors de la compilation. |
✔ |
|
NUMBER |
Identificateur interne / généré par le système pour le schéma utilisé. |
✔ |
|
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 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 |
Rôle actif dans la session au moment de la requête. |
✔ |
|
NUMBER |
Identificateur interne / généré par le système pour l’entrepôt utilisé. |
✔ |
|
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. Valeurs valides : |
✔ |
|
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 (dans le fuseau horaire local) |
✔ |
|
TIMESTAMP_LTZ |
Heure de fin de l’instruction (dans le fuseau horaire local). |
✔ |
|
NUMBER |
Temps écoulé (en millisecondes). |
✔ |
|
NUMBER |
Nombre d’octets analysés par cette instruction. |
✔ |
|
FLOAT |
Pourcentage de données analysées à partir du cache du disque local. La valeur va de 0,0 à 1,0. Multipliez par 100 pour obtenir un vrai pourcentage. |
|
|
NUMBER |
Octets écrits (par exemple, lors du chargement dans une table). |
|
|
NUMBER |
Octets écrits dans un objet de résultat. Par exemple, |
|
|
NUMBER |
Octets lus à partir d’un objet de résultat. |
|
|
NUMBER |
Nombre de lignes produites par cette instruction. La colonne ROWS_PRODUCED sera obsolète dans une prochaine version. La valeur de la colonne ROWS_PRODUCED ne reflète pas toujours le nombre logique de lignes affectées par une requête. Snowflake recommande d’utiliser les colonnes ROWS_INSERTED, ROWS_UPDATED, ROWS_WRITTEN_TO RESULTS ou ROWS_DELETED à la place. |
✔ |
|
NUMBER |
Nombre de lignes insérées par la requête. |
|
|
NUMBER |
Nombre de lignes mises à jour par la requête. |
|
|
NUMBER |
Nombre de lignes supprimées par la requête. |
|
|
NUMBER |
Nombre de lignes déchargées lors de l’exportation des données. |
|
|
NUMBER |
Nombre d’octets supprimés par la requête. |
|
|
NUMBER |
Nombre de micro-partitions analysées. |
|
|
NUMBER |
Nombre total de micro-partitions de toutes les tables incluses dans cette requête. |
|
|
NUMBER |
Volume de données déversées sur le disque local (« spill to disk »). |
|
|
NUMBER |
Volume de données déversées sur le disque distant (« spill to disk »). |
|
|
NUMBER |
Quantité de données envoyées sur le réseau. |
|
|
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 DML simultané. |
✔ |
|
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 les données des tables Snowflake. |
✔ |
|
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. Cette valeur ne prend pas en compte l’ajustement pour les services Cloud, et peut donc être supérieure aux crédits facturés. Pour déterminer le nombre de crédits réellement facturés, exécutez des requêtes sur la vue METERING_DAILY_HISTORY. |
✔ |
|
TIMESTAMP_LTZ |
Heure et date (dans le fuseau horaire UTC) de suppression du compte de lecteur. |
✔ |
|
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. |
|
|
NUMBER |
Pourcentage approximatif de ressources de calcul actives dans l’entrepôt pour cette exécution de requête. |
|
|
BOOLEAN |
Indique si la requête a été générée par le client. |
|
|
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 |
ID de la transaction qui contient l’instruction ou 0 si l’instruction n’est pas exécutée dans une transaction. |
|
|
NUMBER |
Temps (en millisecondes) pour compléter la recherche en cache lors de l’appel d’une fonction mémoïsable. |
|
|
VARCHAR |
Spécifie APPLICATION, DATABASE_ROLE ou ROLE qui a exécuté la requête. |
|
|
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 |
|
|
VARCHAR |
Une chaîne formatée JSON qui contient trois champs concernant les rôles secondaires qui ont été évalués dans la requête : une liste de rôles secondaires ou |
|
|
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 |
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. |
|
|
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. |
|
|
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. |
Notes sur l’utilisation¶
Général¶
La latence pour la vue peut atteindre 45 minutes.
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.
Tables hybrides¶
Les conseils suivants concernent l’exécution de requêtes sur des tables hybrides lors de l’utilisation de vues QUERY_HISTORY.
Les requêtes de courte durée qui utilisent exclusivement des tables hybrides ne génèrent plus d’enregistrement dans cette vue ou dans QUERY_HISTORY (fonction de table Information Schema). Pour surveiller ces requêtes, utilisez la fonction AGGREGATE_QUERY_HISTORY. Cette vue vous permet de surveiller plus facilement les charges de travail opérationnelles à haut débit pour détecter les tendances et les problèmes.
Les requêtes à courte durée d’exécution qui opèrent exclusivement sur des tables hybrides ne fourniront plus de profil de requête que vous pouvez inspecter dans Snowsight.
Les requêtes sur les tables hybrides génèrent un enregistrement dans la vue QUERY_HISTORY et un profil de requête si l’une des conditions suivantes est remplie :
Une requête est exécutée sur n’importe quel type de table autre que le type de table hybride. Cette condition garantit qu’il n’y a pas de changement de comportement pour les charges de travail existantes non Unistore.
Une requête échoue avec un EXECUTION_STATUS qui est
failed_with_incident
(voir QUERY_HISTORY). Cette condition garantit que vous pouvez enquêter et signaler la requête spécifique qui a échoué afin d’obtenir de l’aide.Une requête dure plus longtemps qu’environ 500 millisecondes. Cette condition permet d’étudier les problèmes de performance des requêtes lentes.
La taille du résultat de la requête est trop importante.
Une requête est associée à une transaction Snowflake.
Une requête contient une fonction système avec des effets secondaires.
Une requête n’est pas l’un des types d’instructions suivants : SELECT, INSERT, DELETE, UPDATE, MERGE.
Une requête est exécutée à partir de SnowSQL, Snowsight ou la console classique. Cette condition garantit que vous pouvez générer manuellement un profil de requête complet afin d’étudier les problèmes de performance pour toute requête spécifique, même si elle n’est pas classée comme exécutée sur une longue durée.
Même si une requête ne répond à aucun des critères ci-dessus, les requêtes peuvent également être échantillonnées périodiquement pour générer un enregistrement dans la vue QUERY_HISTORY et un profil de requête pour faciliter votre enquête.
Commandes PUT et GET¶
Pour les commandes PUT et GET, un EXECUTION_STATUS de success
dans l”QUERY_HISTORY ne signifie pas que les fichiers de données ont été importés correctement. Au lieu de cela, le statut indique que Snowflake a reçu l’autorisation de procéder au transfert de fichier.