Interroga le tabelle e le viste del 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à.

Interroga le tabelle e le viste del sistema

Oltre alle tabelle che crei, il tuo data warehouse contiene una serie di tabelle e viste di sistema. Queste tabelle e viste contengono informazioni sull'installazione e sulle varie query e processi in esecuzione sul sistema. È possibile interrogare queste tabelle e viste 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, puoi interrogare la tabella del catalogo di DEF sistema PG_ TABLE _. È 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, vedere TABLEPG_ _. 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

Puoi interrogare il USER catalogo PG_ per visualizzare un elenco di tutti gli utenti, insieme all'ID utente (USESYSID) e ai privilegi utente.

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. Puoi filtrare la tua query per mostrare solo i nomi utente definiti dall'utente where usesysid > 1 aggiungendoli alla tua dichiarazione. 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 adminuser è 100. Per elencare le quattro query più recenti eseguite daadminuser, puoi 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 LIMIT clausola con la tua SELECT dichiarazione 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 quella 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 eseguire una query sulla tabella STV _ RECENTS system per ottenere un elenco di sessioni IDs 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 SELECT istruzione.

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