Interrogez les tables et les vues du système - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogez les tables et les vues du système

Outre les tables que vous créez, votre entrepôt de données contient un certain nombre de tables et de vues système. Ces tables et vues contiennent des informations sur votre installation ainsi que sur les différents processus et requêtes exécutés sur le système. Vous pouvez interroger ces tables et vues système pour collecter des informations sur votre base de données. Pour plus d'informations, consultez la référence relative aux tables et aux vues du système dans le manuel Amazon Redshift Database Developer Guide. La description de chaque table ou vue indique si une table est visible par tous les utilisateurs ou uniquement par les superutilisateurs. Connectez-vous en tant que super-utilisateur pour interroger les tables visibles uniquement des super-utilisateurs.

Afficher la liste des noms de table

Pour afficher la liste de toutes les tables d'un schéma, vous pouvez interroger la table du catalogue du DEF système TABLE PG_ _. Vous pouvez d’abord examiner le paramétrage de search_path.

SHOW search_path;

Le résultat devrait être similaire à ce qui suit :

search_path --------------- $user, public

L’exemple suivant ajoute le schéma SALES au chemin de recherche et affiche toutes les tables du schéma SALES.

set search_path to '$user', 'public', 'sales'; SHOW search_path; search_path ------------------------ "$user", public, sales select * from pg_table_def where schemaname = 'sales'; schemaname | tablename | column | type | encoding | distkey | sortkey | notnull ------------+-----------+----------+------------------------+----------+---------+---------+--------- sales | demo | personid | integer | az64 | f | 0 | f sales | demo | city | character varying(255) | lzo | f | 0 | f

L’exemple suivant illustre une liste de toutes les tables appelées DEMO dans tous les schémas de la base de données actuelle.

set search_path to '$user', 'public', 'sales'; select * from pg_table_def where tablename = 'demo'; schemaname | tablename | column | type | encoding | distkey | sortkey | notnull ------------+-----------+----------+------------------------+----------+---------+---------+--------- public | demo | personid | integer | az64 | f | 0 | f public | demo | city | character varying(255) | lzo | f | 0 | f sales | demo | personid | integer | az64 | f | 0 | f sales | demo | city | character varying(255) | lzo | f | 0 | f

Pour plus d'informations, consultez PG_ TABLE _ DEF.

Vous pouvez également utiliser l'éditeur de requêtes Amazon Redshift v2 pour afficher toutes les tables d'un schéma spécifique en choisissant d'abord la base de données à laquelle vous souhaitez vous connecter.

Afficher les utilisateurs

Vous pouvez interroger le USER catalogue PG_ pour afficher la liste de tous les utilisateurs, ainsi que leur ID utilisateur (USESYSID) et leurs privilèges.

SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- rdsdb | 1 | true | true | true | ******** | infinity | awsuser | 100 | true | true | false | ******** | | guest | 104 | true | false | false | ******** | |

Le nom d’utilisateur rdsdb est utilisé en interne par Amazon Redshift pour effectuer les tâches habituelles d’administration et de maintenance. Vous pouvez filtrer votre requête pour n'afficher que les noms d'utilisateur définis par l'utilisateur en ajoutant des éléments where usesysid > 1 à votre SELECT déclaration.

SELECT * FROM pg_user WHERE usesysid > 1; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- awsuser | 100 | true | true | false | ******** | | guest | 104 | true | false | false | ******** | |

Afficher les requêtes récentes

Dans l'exemple précédent, l'ID utilisateur (user_id) pour adminuser est 100. Pour répertorier les quatre requêtes les plus récentes exécutées paradminuser, vous pouvez interroger la HISTORY vue SYS QUERY _ _.

Vous pouvez utiliser cette vue pour trouver l'ID de requête (query_id) ou l'ID de processus (session_id) d'une requête récemment exécutée. Vous pouvez également l’utiliser pour connaître le temps mis par une requête pour s’exécuter. SYS_ QUERY _ HISTORY inclut les 4 000 premiers caractères de la chaîne de requête (query_text) pour vous aider à localiser une requête spécifique. Utilisez la LIMIT clause associée à votre SELECT déclaration pour limiter les résultats.

SELECT query_id, session_id, elapsed_time, query_text FROM sys_query_history WHERE user_id = 100 ORDER BY start_time desc LIMIT 4;

Le résultat ressemble à ce qui suit.

query_id | session_id | elapsed_time | query_text ----------+--------------+---------------+---------------------------------------------------------------- 892 | 21046 | 55868 | SELECT query, pid, elapsed, substring from ... 620 | 17635 | 1296265 | SELECT query, pid, elapsed, substring from ... 610 | 17607 | 82555 | SELECT * from DEMO; 596 | 16762 | 226372 | INSERT INTO DEMO VALUES (100);

Déterminer l'ID de session d'une requête en cours d'exécution

Pour récupérer les informations de la table système relatives à une requête, vous devrez peut-être spécifier l'ID de session (ID de processus) associé à cette requête. Vous pouvez également avoir besoin de trouver l'ID de session pour une requête toujours en cours d'exécution. Par exemple, vous avez besoin de l'ID de session si vous devez annuler une requête dont l'exécution est trop longue sur un cluster provisionné. Vous pouvez interroger la table RECENTS système STV _ pour obtenir une liste des sessions IDs pour exécuter des requêtes, ainsi que la chaîne de requête correspondante. Si votre requête renvoie plusieurs sessions, vous pouvez consulter le texte de la requête pour déterminer l'identifiant de session dont vous avez besoin.

Pour déterminer l'ID de session d'une requête en cours d'exécution, exécutez l'SELECTinstruction suivante.

SELECT session_id, user_id, start_time, query_text FROM sys_query_history WHERE status='running';