STL_DDLTEXT - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

STL_DDLTEXT

擷取在系統上執行的下列DDL陳述式。

這些DDL陳述式包括下列查詢和物件:

  • CREATE SCHEMA, TABLE, VIEW

  • DROP SCHEMA, TABLE, VIEW

  • ALTER SCHEMA, TABLE

另請參閱 STL_QUERYTEXTSTL_UTILITYTEXTSVL_STATEMENTTEXT。這些檢視提供系統上執行之SQL指令的時間表;此歷程記錄對於疑難排解和建立所有系統活動的稽核軌跡非常有用。

使用STARTTIME和ENDTIME資料行來找出在指定期間內記錄了哪些陳述式。長的SQL文字區塊會分成 200 個字元長的行;這個資SEQUENCE料行會識別屬於單一陳述式的文字片段。

STL_ DDLTEXT 對所有用戶都可以看到。超級使用者可以看見所有資料列;一般使用者只能看見自己的資料。如需詳細資訊,請參閱系統資料表和檢視中資料的可見性

此表格中的部分或全部資料也可以在SYS監視檢視中找到SYS_QUERY_HISTORY。SYS監視檢視中的資料格式化為更易於使用和理解。我們建議您使用SYS監視視圖進行查詢。

資料表欄

欄名稱 資料類型 描述
userid integer 產生項目的使用者之 ID。
xid bigint 與陳述式關聯的交易 ID。
pid integer 與陳述式相關聯的處理程序 ID。
label character(320) 用於執行查詢的檔案名稱或使用 SET QUERY _ GROUP 指令定義的標籤。如果查詢不是以檔案為基礎或未設定 QUERY _ GROUP 參數,則此欄位為空白。
starttime timestamp 查詢開始的時間。UTC總時間包括佇列和執行。秒小數部分的精確度為 6 位元。例如:2009-06-12 11:29:19.131358
endtime timestamp 查詢完UTC成的時間。總時間包括佇列和執行。秒小數部分的精確度為 6 位元。例如:2009-06-12 11:29:19.131358
sequence integer 當單一陳述式包含不只 200 個字元時,會將該陳述式的其他資料列記錄下來。序列 0 是第一列,1 是第二列,以此類推。
text character(200) SQL文字,以 200 個字元為增量。此欄位可能包含反斜線 (\\) 和換行符號 (\n) 等特殊字元。

範例查詢

下列查詢會傳回包含先前執行DDL陳述式的記錄。

select xid, starttime, sequence, substring(text,1,40) as text from stl_ddltext order by xid desc, sequence;

以下是顯示四個CREATETABLE陳述式的範例輸出。這些DDL陳述式會出現在text資料行中,為了方便閱讀而被截斷。

xid | starttime | sequence | text ------+----------------------------+----------+------------------------------------------ 1806 | 2013-10-23 00:11:14.709851 | 0 | CREATE TABLE supplier ( s_suppkey int4 N 1806 | 2013-10-23 00:11:14.709851 | 1 | s_comment varchar(101) NOT NULL ) 1805 | 2013-10-23 00:11:14.496153 | 0 | CREATE TABLE region ( r_regionkey int4 N 1804 | 2013-10-23 00:11:14.285986 | 0 | CREATE TABLE partsupp ( ps_partkey int8 1803 | 2013-10-23 00:11:14.056901 | 0 | CREATE TABLE part ( p_partkey int8 NOT N 1803 | 2013-10-23 00:11:14.056901 | 1 | ner char(10) NOT NULL , p_retailprice nu (6 rows)

重建已儲存 SQL

以下SQL列出儲存在 STL _ text 欄中的資料列DDLTEXT。列依 xidsequence 排序。如果原始SQL的多行長度超過 200 個字符,則 STL _ DDLTEXT 可以包含多行sequence

SELECT xid, sequence, LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') WITHIN GROUP (ORDER BY sequence) as query_statement FROM stl_ddltext GROUP BY xid, sequence ORDER BY xid, sequence;
xid | sequence | query_statement --------+-----------+----------------- 7886671 0 create external schema schema_spectrum_uddh\nfrom data catalog\ndatabase 'spectrum_db_uddh'\niam_role ''\ncreate external database if not exists; 7886752 0 CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league\n(\n league_rank smallint,\n prev_rank smallint,\n club_name varchar(15),\n league_name varchar(20),\n league_off decimal(6,2),\n le 7886752 1 ague_def decimal(6,2),\n league_spi decimal(6,2),\n league_nspi smallint\n)\nROW FORMAT DELIMITED \n FIELDS TERMINATED BY ',' \n LINES TERMINATED BY '\\n\\l'\nstored as textfile\nLOCATION 's 7886752 2 3://mybucket-spectrum-uddh/'\ntable properties ('skip.header.line.count'='1'); ...

若要重建SQL儲存在 STL _ text 欄中DDLTEXT,請執行下列SQL陳述式。它將來自text列中的一個或多個段的DDL語句放在一起。在運行重構之前SQL,請在SQL客戶端中用新行替換任何(\n)特殊字符。下列SELECT陳述式的結果會依序將三列放在一起SQL,以便在query_statement欄位中重建。

SELECT LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement FROM stl_ddltext GROUP BY xid, endtime order by xid, endtime;
query_statement -------------- create external schema schema_spectrum_uddh\nfrom data catalog\ndatabase 'spectrum_db_uddh'\niam_role ''\ncreate external database if not exists; CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league\n(\n league_rank smallint,\n prev_rank smallint,\n club_name varchar(15),\n league_name varchar(20),\n league_off decimal(6,2),\n league_def decimal(6,2),\n league_spi decimal(6,2),\n league_nspi smallint\n)\nROW FORMAT DELIMITED \n FIELDS TERMINATED BY ',' \n LINES TERMINATED BY '\\n\\l'\nstored as textfile\nLOCATION 's3://mybucket-spectrum-uddh/'\ntable properties ('skip.header.line.count'='1');