本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
STL_QUERYTEXT
擷取SQL命令的查詢文字。
查詢 STL_QUERYTEXT 檢視以擷取SQL為下列陳述式記錄的 :
-
SELECT, SELECT INTO
-
INSERT, UPDATE, DELETE
-
COPY
-
UNLOAD
-
執行 VACUUM和 產生的查詢 ANALYZE
-
CREATE TABLE AS (CTAS)
若要查詢指定期間內這些陳述式的活動,請加入 STL_QUERYTEXT 和 STL_QUERY 檢視。
注意
STL_QUERY 和 STL_QUERYTEXT 檢視僅包含查詢的相關資訊,不包含其他公用程式和DDL命令。如需 Amazon Redshift 執行之所有陳述式的清單和資訊,您也可以查詢 STL_DDLTEXT 和 STL_UTILITYTEXT 檢視。如需 Amazon Redshift 執行之所有陳述式的完整清單,您可以查詢 SVL_STATEMENTTEXT 檢視。
另請參閱 STL_DDLTEXT、STL_UTILITYTEXT 和 SVL_STATEMENTTEXT。
STL所有使用者都可看見 _QUERYTEXT。超級使用者可以看見所有資料列;一般使用者只能看見自己的資料。如需詳細資訊,請參閱系統資料表和檢視中資料的可見性。
此資料表中的部分或全部資料也可以在SYS監控檢視 中找到SYS_QUERY_TEXT。SYS 監控檢視中的資料已格式化,以便於使用和理解。建議您針對查詢使用SYS監控檢視。
資料表欄
欄名稱 | 資料類型 | 描述 |
---|---|---|
userid | integer | 產生項目的使用者之 ID。 |
xid | bigint | 交易 ID。 |
pid | integer | 處理程序 ID。正常情況下,工作階段中的所有查詢都是在相同的處理程序中執行,所以若您在相同的工作階段中執行一系列查詢,則此值通常會保持不變。在某些內部事件之後,Amazon Redshift 可能會重新啟動作用中工作階段並指派新的 PID。如需詳細資訊,請參閱STL_RESTARTED_SESSIONS。您可以使用此欄來聯結至 STL_ERROR 檢視。 |
query | integer | 查詢 ID。查詢欄可用於加入其他系統表格與檢視。 |
sequence | integer | 當單一陳述式包含不只 200 個字元時,會將該陳述式的其他資料列記錄下來。序列 0 是第一列,1 是第二列,以此類推。 |
text | character(200) | SQL 文字,以 200 個字元遞增。此欄位可能包含反斜線 (\\ ) 和換行符號 (\n ) 等特殊字元。 |
範例查詢
您可以使用 PGBACKEND_PID() 函數來擷取目前工作階段的資訊。例如,下列查詢會針對目前工作階段中完成的查詢傳回其查詢 ID 和一部分的查詢文字。
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)
重建已儲存的 SQL
若要重建SQL存放在 STL_ text
欄中的 QUERYTEXT,請執行SELECT陳述式,以SQL從text
欄中的 1 個或多個部分建立 。在執行重建的 之前SQL,請將任何 (\n
) 特殊字元取代為新行。下列SELECT陳述式的結果是在 query_statement
SQL欄位中重建的資料列。
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;
例如,下列查詢會選取 3 個資料欄。查詢本身超過 200 個字元,並部分存放在 STL_ 中QUERYTEXT。
select
1 AS a0123456789012345678901234567890123456789012345678901234567890,
2 AS b0123456789012345678901234567890123456789012345678901234567890,
3 AS b012345678901234567890123456789012345678901234
FROM stl_querytext;
在此範例中,查詢會儲存在 STL_ text
欄中的 2 個部分 (列) 中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;
若要重建SQL存放在 STL_ 中的 QUERYTEXT,請執行下列 SQL。
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();
若要在用戶端SQL中使用產生的重建,請將任何 (\n
) 特殊字元取代為新的行。
text
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;