Je souhaite faire correspondre les ID de requête dans les tables et les vues système dans Amazon Redshift.
Brève description
Vous pouvez utiliser la colonne query_id comme ID de requête pour les vues SYS, y compris SYS_QUERY_HISTORY. Pour les tables et les vues STL/SVL, y compris STL \ _QUERY, vous pouvez utiliser la colonne de requête comme ID de requête. La colonne de requête identifie les requêtes enfants réécrites qu'Amazon Redshift génère lorsqu'il traite la requête d'origine. Pour plus d'informations, consultez la section Amélioration du suivi des identifiants de requête à l'aide des vues de surveillance SYS.
Résolution
Autoriser l'accès aux tables système
Pour faire correspondre les ID de requête dans les tables système d'Amazon Redshift, l'utilisateur doit être superutilisateur ou disposer des privilèges nécessaires. Pour plus d'informations sur la procédure d’octroi de l'accès à un utilisateur spécifique, consultez la section Visibilité des données dans les tables et les vues système.
Pour accorder l'accès à un utilisateur spécifique et attribuer un rôle défini par le système, exécutez la commande suivante :
GRANT ROLE sys:monitor TO database_user;
Remarque : Remplacez database_user par l'utilisateur de votre base de données.
Corréler les ID de requête
Amazon Redshift peut ne pas fournir de correspondance exacte entre la colonne query_id et la colonne de requête. Toutefois, vous pouvez rechercher des correspondances potentielles entre les tables SYS et STL/SVL.
Utilisez le paramètre query_id de SYS pour obtenir l'ID de requête en STL/SVL dans la requête suivante :
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE a.query_id = <query_id>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
Remarque : Les requêtes qui s'exécutent uniquement sur le nœud principal sont présentes dans SYS_QUERY_HISTORY, mais STL_QUERY exclut ces requêtes.
Utilisez la requête STL/SVL pour obtenir l'identifiant de requête dans SYS dans la requête suivante :
SELECT query_id, query FROM sys_query_history a, stl_query b
WHERE b.query = <query>
AND a.transaction_id = b.xid
AND b.starttime BETWEEN a.start_time AND a.end_time
AND b.endtime BETWEEN a.start_time AND a.end_time;
Rechercher des instructions SQL identiques dans l'historique des requêtes
La sortie de ces requêtes peut être utile lorsque vous comparez différentes exécutions de requêtes. Pour rechercher des requêtes identiques exécutées à des moments différents dans SYS_QUERY_HISTORY, utilisez les requêtes suivantes pour récupérer la valeur de user_query_hash et ses entrées correspondantes :
SELECT user_query_hash FROM sys_query_history
WHERE query_id = <query_id>;
SELECT *
FROM sys_query_history
WHERE user_query_hash = '<user_query_hash>';
Informations connexes
Flux de travail de planification et d’exécution des requêtes