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

STL_QUERYTEXT

Acquisisce il testo di query per i comandi SQL.

Eseguire una query sulla tabella STL_QUERYTEXT per acquisire l'SQL registrato per le seguenti istruzioni:

  • SELECT, SELECT INTO

  • INSERT, UPDATE, DELETE

  • COPY

  • UNLOAD

  • Le query generate dall'esecuzione di VACUUM e ANALYZE

  • CREATE TABLE AS (CTAS)

Per eseguire una query dell'attività per queste istruzioni in un dato periodo di tempo, unisci le viste STL_QUERYTEXT e STL_QUERY.

Nota

Le viste STL_QUERY e STL_QUERYTEXT contengono solo informazioni sulle query, non su altre utility o comandi DDL. Per un elenco e le informazioni su tutte le istruzioni eseguite da Amazon Redshift, è possibile anche eseguire query sulle tabelle STL_DDLTEXT e STL_UTILITYTEXT. Per un elenco completo di tutte le istruzioni eseguite da Amazon Redshift, è possibile eseguire una query sulla vista SVL_STATEMENTTEXT.

Consulta anche STL_DDLTEXT, STL_UTILITYTEXT e SVL_STATEMENTTEXT.

STL_QUERYTEXT è visibile a tutti gli utenti. Gli utenti con privilegi avanzati visualizzano tutte le righe; gli utenti regolari visualizzano solo i propri dati. Per ulteriori informazioni, consulta Visibilità dei dati nelle tabelle e nelle viste di sistema.

Alcuni o tutti i dati di questa tabella sono definiti anche nella vista di monitoraggio SYS SYS_QUERY_TEXT. I dati nella vista di monitoraggio SYS sono formattati in modo da essere più facili da usare e comprendere. Ti consigliamo di utilizzare la vista di monitoraggio SYS per le query.

Colonne di tabella

Nome colonna Tipo di dati Descrizione
userid integer ID dell'utente che ha generato la voce.
xid bigint ID transazione.
pid integer ID processo. In genere, tutte le query in una sessione sono eseguite nello stesso processo, quindi questo valore di solito rimane costante se esegui una serie di query nella stessa sessione. Seguendo determinati eventi interni, Amazon Redshift può riavviare una sessione attiva e assegnare un nuovo PID. Per ulteriori informazioni, consulta STL_RESTARTED_SESSIONS. È possibile utilizzare questa colonna per eseguire la connessione alla vista STL_ERROR.
query integer ID query. La colonna di query può essere utilizzata per unire altre tabelle e visualizzazioni del sistema.
sequenza integer Quando una singola istruzione contiene più di 200 caratteri, vengono registrate delle righe aggiuntive per tale istruzione. La sequenza 0 è la prima riga, 1 la seconda e così via.
text character(200) Testo SQL, in incrementi da 200 caratteri. Questo campo potrebbe contenere caratteri speciali come barra rovesciata (\\) e nuova riga (\n).

Query di esempio

È possibile utilizzare la funzione PG_BACKEND_PID() per recuperare le informazioni sulla sessione corrente. Ad esempio, la query seguente restituisce l'ID di query e una porzione del testo di query delle query completate nella sessione corrente.

select query, substring(text,1,60) from stl_querytext where pid = pg_backend_pid() order by query desc; query | substring -------+-------------------------------------------------------------- 28262 | select query, substring(text,1,80) from stl_querytext where 28252 | select query, substring(path,0,80) as path from stl_unload_l 28248 | copy category from 's3://dw-tickit/manifest/category/1030_ma 28247 | Count rows in target table 28245 | unload ('select * from category') to 's3://dw-tickit/manifes 28240 | select query, substring(text,1,40) from stl_querytext where (6 rows)

Ricostruzione dell'SDL archiviato

Per ricostruire l'SQL archiviato nella colonna text di STL_QUERYTEXT, eseguire un'istruzione SELECT per creare un SQL da 1 o più parti nella colonna text. Prima di eseguire l'SQL ricostruito, sostituire un carattere speciale qualsiasi (\n) con una nuova riga. Il risultato della dichiarazione SELECT seguente è dato da una riga di SQL ricostruiti nel campo query_statement.

SELECT query, LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement, COUNT(*) as row_count FROM stl_querytext GROUP BY query ORDER BY query desc;

Ad esempio, la query seguente seleziona 3 colonne. La query stessa è più lunga di 200 caratteri ed è archiviata in parti in STL_QUERYTEXT.

select 1 AS a0123456789012345678901234567890123456789012345678901234567890, 2 AS b0123456789012345678901234567890123456789012345678901234567890, 3 AS b012345678901234567890123456789012345678901234 FROM stl_querytext;

In questo esempio, la query è archiviata in 2 parti (righe) nella colonna text di STL_QUERYTEXT.

select query, sequence, text from stl_querytext where query=pg_last_query_id() order by query desc, sequence limit 10;
query | sequence | text -------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 45 | 0 | select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234 45 | 1 | \nFROM stl_querytext;

Per ricostruire l'SQL archiviato in STL_QUERYTEXT, eseguire l'SQL seguente.

select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS text from stl_querytext where query=pg_last_query_id();

Per utilizzare l'SQL ricostruito derivante nel client, sostituire qualsiasi carattere speciale (\n) con una nuova riga.

text ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;