Eseguire query sulle tabelle e sulle viste di sistema - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuovi Python a UDFs partire dal 1° novembre 2025. Se vuoi usare Python UDFs, crea la UDFs data precedente a quella data. Python esistente UDFs continuerà a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

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à.

Eseguire query sulle tabelle e sulle viste di sistema

Oltre alle tabelle che hai creato, il data warehouse contiene numerose tabelle e viste di sistema. Queste tabelle e viste di sistema contengono informazioni sull’installazione e sulle varie query e sui vari processi in esecuzione sul sistema. Puoi eseguire query su queste tabelle e viste di sistema per raccogliere informazioni sul database. Per ulteriori informazioni, consulta Riferimento di tabelle e viste di sistema nella Guida per sviluppatori di database di Amazon Redshift. La descrizione per ogni tabella o vista indica se una tabella è visibile a tutti gli utenti o solo agli utenti con privilegi avanzati. 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 inoltre utilizzare Amazon Redshift Query Editor V2 per visualizzare tutte le tabelle in uno schema specificato scegliendo innanzitutto 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 adminuser è 100. Per elencare le quattro query più recenti eseguite da adminuser, puoi sottoporre a query la vista SYS_QUERY_HISTORY.

Puoi utilizzare questa vista per trovare l’ID query (query_id) o l’ID 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 individuare 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);

Determinare l’ID sessione di una query in esecuzione

Per recuperare le informazioni sulle tabelle di sistema, potresti dover specificare l’ID sessione (ID processo) associato alla query. Potresti dover trovare l’ID sessione per una query ancora in fase di esecuzione. Ad esempio, hai bisogno dell’ID sessione se devi annullare una query la cui esecuzione dura troppo a lungo su un cluster con provisioning. È possibile interrogare la tabella di sistema STV_RECENTS per ottenere un elenco di sessioni IDs per l'esecuzione delle query, insieme alla stringa di query corrispondente. Se la query restituisce più ID sessione, puoi esaminare il testo della query per determinare l’ID sessione necessario.

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

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