Passaggio 6: interroga le tabelle di sistema - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Passaggio 6: interroga le tabelle di sistema

Oltre alle tabelle create, il data warehouse contiene una serie di tabelle e viste di sistema. Queste tabelle di sistema contengono informazioni sull'installazione e sui diversi processi e query in esecuzione nel sistema. Puoi eseguire query su queste tabelle di sistema per raccogliere informazioni sul database. Per ulteriori informazioni, consulta il riferimento alle tabelle e alle viste di sistema nella Amazon Redshift Database Developer Guide. La descrizione di ogni tabella o vista indica se una tabella è visibile a tutti gli utenti o solo ai superutenti. Per eseguire una query su tabelle visibili solo agli utenti con privilegi avanzati, è necessario accedere come utente con privilegi avanzati.

Visualizza un elenco di nomi di tabella

Per visualizzare un elenco di tutte le tabelle in uno schema, è possibile eseguire una query sulla tabella del catalogo di sistema PG_TABLE_DEF. È possibile prima esaminare l'impostazione per search_path.

SHOW search_path;

Il risultato dovrebbe essere simile al seguente,

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

Nell'esempio seguente lo schema SALES viene aggiunto al percorso di ricerca e sono mostrate tutte le tabelle presenti nello schema 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'esempio seguente mostra un elenco di tutte le tabelle denominate DEMO in tutti gli schemi del database corrente.

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

Per ulteriori informazioni, consultare PG_TABLE_DEF.

Puoi anche utilizzare l'editor di query di Amazon Redshift v2 per visualizzare tutte le tabelle in uno schema specificato scegliendo prima un database a cui connetterti.

Visualizzazione degli utenti

È possibile eseguire una query sul catalogo PG_USER per visualizzare un elenco di tutti gli utenti del database, insieme all'ID utente (USESYSID) e ai privilegi degli utenti.

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 | ******** | |

Il nome utente rdsdb viene utilizzato internamente da Amazon Redshift per eseguire attività di amministrazione e manutenzione di routine. È possibile filtrare la query in modo da visualizzare solo nomi utente definiti dall'utente aggiungendo where usesysid > 1 all'istruzione SELECT.

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 | ******** | |

Visualizza le query recenti

Nell'esempio precedente, l'ID utente (user_id) per è 100. adminuser Per elencare le quattro query più recenti eseguite daadminuser, è possibile interrogare la vista SYS_QUERY_HISTORY.

È possibile utilizzare questa visualizzazione per trovare l'ID della query (query_id) o l'ID del processo (session_id) per una query eseguita di recente. È inoltre possibile utilizzare questa vista per verificare quanto tempo ha richiesto il completamento di una query. SYS_QUERY_HISTORY include i primi 4.000 caratteri della stringa di query (query_text) per aiutarti a localizzare una query specifica. Utilizza la clausola LIMIT con l'istruzione SELECT per limitare i risultati.

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

Il risultato è simile al seguente.

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

Determina l'ID di sessione di una query in esecuzione

Per recuperare le informazioni della tabella di sistema su una query, potrebbe essere necessario specificare l'ID di sessione (ID del processo) associato a tale query. In alternativa, potrebbe essere necessario trovare l'ID di sessione per una query ancora in esecuzione. Ad esempio, è necessario l'ID di sessione se è necessario annullare una query la cui esecuzione richiede troppo tempo su un cluster predisposto. È possibile interrogare la tabella di sistema STV_RECENTS per ottenere un elenco di ID di sessione per l'esecuzione delle query, insieme alla stringa di query corrispondente. Se la query restituisce più sessioni, è possibile esaminare il testo della query per determinare l'ID di sessione necessario.

Per determinare l'ID di sessione di una query in esecuzione, esegui la seguente istruzione SELECT.

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