Amazon Redshift 在我的叢集上建立了暫存資料表,我想知道原因。此外,我想知道這些資料表是否會佔用節點上的可用記憶體空間
解決方法
Amazon Redshift 會建立暫存資料表來儲存資料定義語言 (DDL) 和資料操作語言 (DML) 作業的中間查詢處理結果。Amazon Redshift 會將這些資料表儲存在單獨的特定工作階段結構描述中,並採用 pg_temp_1命名慣例。您無法為該結構描述指定名稱。具體化視觀表重新整理也會使用暫存資料表來儲存中間查詢結果。
使用者也可以在 CREATE TABLE 陳述式中使用 TEMPORARY 和 TEMP 關鍵字來建立暫存資料表。
**重要:**如果您指定以 # 開頭的資料表名稱,則 Amazon Redshift 會將該資料表建立為暫存資料表。命令範例:
create table #newtable (id) as select * from oldtable;
暫存資料表只會顯示在目前工作階段中。工作階段結束後,Amazon Redshift 會自動從該工作階段中刪除暫存資料表。
當您在叢集上啟動資料共用時,您可以將叢集設定為取用者。在這種情況下,Amazon Redshift 會建立暫存物件來儲存終端使用者從生產者叢集擷取的資料區塊。
預設情況下,資料庫使用者透過自動成為 PUBLIC 群組成員,擁有建立暫存資料表的權限。若要封鎖此權限,請執行下列查詢以撤銷 PUBLIC 群組的 TEMP 權限:
Revoke TEMPORARY | TEMP on DATABASE db_name from GROUP PUBLIC;
**注意:**將 db_name 替換為您的資料庫名稱。
然後,明確授予您想要允許建立暫存資料表的使用者或使用者群組 TEMP 權限。
了解暫存資料表儲存空間
暫存資料表會使用計算節點上的本機儲存空間。工作階段結束且 Amazon Redshift 刪除暫存資料表後,Amazon Redshift 會將儲存空間釋放回節點。暫存資料表遵循以下儲存要求:
- 儘管暫存資料表使用叢集的整體儲存分配,但該儲存是暫時性的,不會計入您的持續性資料儲存成本。
- 暫存資料表使用的儲存空間大小取決於資料的規模和查詢的複雜度。
- 當您有大型且複雜的查詢需要使用大型臨時資料表時,叢集的儲存空間可能會短暫大幅增加。
**注意:**預設情況下,Amazon Redshift 會對暫存資料表套用與永久資料表相同的自動壓縮設定。暫存資料表是為了提升查詢處理效率而設計,用於儲存中間結果,以加快查詢效能。
相關資訊
STV_TBL_PERM
STL_SAVE