步驟 6:查詢系統資料表 - Amazon Redshift

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

步驟 6:查詢系統資料表

除了您建立的資料表之外,資料倉儲還包含許多系統資料表和檢視表。這些系統資料表包含安裝的相關資訊,以及在系統上執行之各種查詢和程序的相關資訊。您可以查詢這些系統資料表來收集資料庫的相關資訊。如需詳細資訊,請參閱 Amazon Redshift 資料庫開發人員指南中的系統資料表和檢視參考資料。每個資料表或檢視表的說明會指出表格對所有使用者都可以看見,還是只有超級使用者才能看見。以超級使用者身分登入,查詢僅超級使用者才能看見的資料表。

檢視資料表名稱的清單

若要檢視結構描述中所有資料表的清單,您可以查詢 PG_TABLE_DEF 系統目錄資料表。您可以先檢查 search_path 的設定。

SHOW search_path;

結果應類似以下內容,

search_path --------------- $user, public

下列範例會將 SALES 結構描述新增至搜尋路徑,並顯示 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

下列範例顯示目前資料庫中所有結構描述名為 DEMO 之所有資料表的清單。

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

如需詳細資訊,請參閱 PG_TABLE_DEF

您也可以使用 Amazon Redshift 查詢編輯器 v2 來檢視指定結構描述中的所有資料表,方法是先選擇要連線的資料庫。

檢視使用者

您可以查詢 PG_USER 目錄來檢視所有使用者的清單,以及使用者 ID (USESYSID) 和使用者權限。

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 | ******** | |

使用者名稱 rdsdb 供 Amazon Redshift 在內部用來執行日常管理和維護任務。您可以將 where usesysid > 1 新增至 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 | ******** | |

檢視近期查詢

在上一個範例中,使用者識別碼 (使用者識別碼) adminuser 為 100。若要列出最近執行的四個查詢adminuser,您可以查詢 SYS_QUERY_歷史記錄檢視。

您可以使用此檢視來尋找最近執行之查詢的查詢識別碼 (query_id) 或處理程序識別碼 (session_id)。您也可以使用此檢視來檢查查詢完成所花費的時間。SYS_QUERY_歷史記錄包括查詢字符串的前 4,000 個字符(查詢文本),以幫助您找到特定的查詢。使用 LIMIT 子句搭配 SELECT 陳述式來限制結果。

SELECT query_id, session_id, elapsed_time, query_text FROM sys_query_history WHERE user_id = 100 ORDER BY start_time desc LIMIT 4;

結果類似如下所示。

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);

確定正在運行的查詢的會話 ID

若要擷取有關查詢的系統資料表資訊,您可能需要指定與該查詢相關聯的工作階段 ID (處理序 ID)。或者,您可能需要為仍在執行的查詢尋找工作階段 ID。例如,如果您需要取消在佈建的叢集上執行時間太長的查詢,則需要工作階段 ID。您可以查詢 STV_RECENTS 系統資料表,以取得用於執行查詢的工作階段 ID 清單,以及對應的查詢字串。如果您的查詢傳回多個工作階段,您可以查看查詢文字,以判斷您需要的工作階段 ID。

若要判斷執行中查詢的工作階段識別碼,請執行下列 SELECT 陳述式。

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