本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SET
設定伺服器組態參數的值。使用 SET命令僅在目前工作階段或交易的持續時間覆寫設定。
使用 RESET 命令將參數恢復為其預設值。
您可以採用數種方式來變更伺服器組態參數。如需詳細資訊,請參閱修改伺服器組態。
語法
SET { [ SESSION | LOCAL ] { SEED | parameter_name } { TO | = } { value | 'value' | DEFAULT } | SEED TO value }
以下陳述式會設定工作階段內容變數的值。
SET { [ SESSION | LOCAL ] variable_name { TO | = } { value | 'value' }
參數
- SESSION
-
指出目前工作階段的設定有效。預設值.
- variable_name
-
指定為工作階段設定的內容變數名稱。
命名慣例是由點分隔的兩部分名稱,例如 identifier.identifier。只允許使用一個點分隔符號。使用符合 Amazon Redshift 標準識別碼規則的 identifier,如需詳細資訊,請參閱 名稱與識別碼。不允許使用分隔的識別碼。
- LOCAL
-
指出目前交易的設定有效。
- SEED TO 值
-
設定RANDOM函數用於產生隨機數字的內部種子。
SET SEED 會取得介於 0 和 1 之間的數值,並將此數字乘以 (231-1) 以搭配RANDOM 函數函數使用。如果您在進行多次RANDOM呼叫SETSEED之前使用 , 會以可預測的順序RANDOM產生數字。
- parameter_name
-
要設定的參數名稱。如需參數的詳細資訊,請參閱 修改伺服器組態。
- 值
-
新參數值。使用單引號將值設定為特定字串。如果使用 SET SEED,此參數會包含 SEED值。
- DEFAULT
-
將參數設定為預設值。
範例
變更目前工作階段的參數
下列範例會設定 datestyle:
set datestyle to 'SQL,DMY';
設定查詢群組以進行工作負載管理
如果查詢群組在佇列定義中列為叢集WLM組態的一部分,您可以將 QUERY_GROUP 參數設定為列出的查詢群組名稱。後續查詢會指派至相關聯的查詢佇列。QUERY_GROUP 設定在工作階段期間或直到遇到 QUERY_ RESET GROUP 命令為止保持有效。
此範例會在查詢群組 'priority' 中執行兩個查詢,然後重設查詢群組。
set query_group to 'priority'; select tbl, count(*)from stv_blocklist; select query, elapsed, substring from svl_qlog order by query desc limit 5; reset query_group;
如需詳細資訊,請參閱工作負載管理。
變更工作階段的預設身分命名空間
資料庫使用者可以設定 default_identity_namespace
。此範例說明如何在目前工作階段的持續時間內SET SESSION
使用 覆寫設定,然後顯示新的身分提供者值。當您搭配 Redshift 和 IAM Identity Center 使用身分提供者時,最常使用此功能。如需搭配 Redshift 使用身分提供者的詳細資訊,請參閱將 Redshift 與 IAM Identity Center 連線,為使用者提供單一登入體驗。
SET SESSION default_identity_namespace = 'MYCO'; SHOW default_identity_namespace;
執行 命令之後,您可以執行如下所示的GRANT陳述式或CREATE陳述式:
GRANT SELECT ON TABLE mytable TO alice; GRANT UPDATE ON TABLE mytable TO salesrole; CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
在此執行個體中,設定預設身分命名空間的效果相當於在每個身分前面加上命名空間。在此範例中, alice
會取代為 MYCO:alice
。如需使用 IAM Identity Center 進行 Redshift 組態相關設定的詳細資訊,請參閱 ALTER SYSTEM和 ALTER IDENTITY PROVIDER。
設定查詢群組的標籤
QUERY_GROUP 參數會為在SET命令之後於相同工作階段中執行的一或多個查詢定義標籤。反之,此標籤會在執行查詢時記錄,並可用來限制從 STL_QUERY 和 STV_INFLIGHT 系統資料表和 SVL_QLOG 檢視傳回的結果。
show query_group; query_group ------------- unset (1 row) set query_group to '6 p.m.'; show query_group; query_group ------------- 6 p.m. (1 row) select * from sales where salesid=500; salesid | listid | sellerid | buyerid | eventid | dateid | ... ---------+--------+----------+---------+---------+--------+----- 500 | 504 | 3858 | 2123 | 5871 | 2052 | ... (1 row) reset query_group; select query, trim(label) querygroup, pid, trim(querytxt) sql from stl_query where label ='6 p.m.'; query | querygroup | pid | sql -------+------------+-------+---------------------------------------- 57 | 6 p.m. | 30711 | select * from sales where salesid=500; (1 row)
查詢群組標籤是實用的機制,方便用來隔離指令碼中執行的個別查詢或查詢群組。您不需要根據他們的 來識別和追蹤查詢IDs;您可以根據他們的標籤來追蹤查詢。
設定產生亂數的 Seed 值
下列範例使用 SEED選項SET,讓RANDOM函數以可預測的順序產生數字。
首先,傳回三個RANDOM整數,而不先設定SEED值:
select cast (random() * 100 as int); int4 ------ 6 (1 row) select cast (random() * 100 as int); int4 ------ 68 (1 row) select cast (random() * 100 as int); int4 ------ 56 (1 row)
現在,將 SEED 值設定為 .25
,然後傳回三個額外的RANDOM數字:
set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)
最後,將 SEED 值重設為 .25
,並確認 RANDOM傳回與先前三個呼叫相同的結果:
set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)
以下範例會設定自訂內容變數。
SET app_context.user_id TO 123; SET app_context.user_id TO 'sample_variable_value';