SET - Amazon Redshift

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

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 SYSTEMALTER 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';