

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# SET
<a name="r_SET"></a>

設定伺服器組態參數的值。使用 SET 命令，僅覆寫目前工作階段持續時間的設定。

使用 [RESET](r_RESET.md) 命令將參數恢復為其預設值。

您可以採用數種方式來變更伺服器組態參數。如需詳細資訊，請參閱[修改伺服器組態](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings)。

## 語法
<a name="r_SET-synopsis"></a>

```
SET { [ SESSION | LOCAL ]
{ SEED | parameter_name } { TO | = }
{ value | 'value' | DEFAULT } |
SEED TO value }
```

以下陳述式會設定工作階段內容變數的值。

```
SET { [ SESSION | LOCAL ]
variable_name { TO | = }
{ value | 'value'  }
```

## Parameters
<a name="r_SET-parameters"></a>

SESSION   
指出目前工作階段的設定有效。預設值.

*variable\_name*   
指定為工作階段設定的內容變數名稱。  
命名慣例是由點分隔的兩部分名稱，例如 *identifier.identifier*。只允許使用一個點分隔符號。使用符合 Amazon Redshift 標準識別碼規則的 *identifier*，如需詳細資訊，請參閱 [名稱與識別碼](r_names.md)。不允許使用分隔的識別碼。

LOCAL   
指出目前交易的設定有效。

SEED TO *value*   
設定 RANDOM 函數產生亂數時要使用的內部種子。  
SET SEED 會採用介於 0 和 1 之間的數*值*，並將此數字乘以 (231-1) 以搭配 [RANDOM 函數](r_RANDOM.md) 函數使用。若您在進行多次 RANDOM 呼叫之前使用 SET SEED，RANDOM 就會依可預測的順序產生數字。

 *parameter\_name*   
要設定的參數名稱。如需參數的詳細資訊，請參閱 [修改伺服器組態](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings)。

 *value*   
新參數值。使用單引號將值設定為特定字串。若使用 SET SEED，此參數會包含 SEED 值。

DEFAULT   
將參數設定為預設值。

## 範例
<a name="r_SET-examples"></a>

 **變更目前工作階段的參數** 

下列範例會設定 datestyle：

```
set datestyle to 'SQL,DMY';
```

 **設定查詢群組以進行工作負載管理** 

若查詢群組在佇列定義中列為叢集 WLM 組態的一部分，您就可以對列出的查詢群組名稱設定 QUERY\_GROUP 參數。後續查詢會指派至相關聯的查詢佇列。QUERY\_GROUP 設定在工作階段期間仍然有效，或直到遇到 RESET QUERY\_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;
```

如需詳細資訊，請參閱[工作負載管理](cm-c-implementing-workload-management.md)。

 **變更工作階段的預設身分命名空間** 

資料庫使用者可以設定 `default_identity_namespace`。此範例示範如何使用 `SET SESSION` 覆寫目前工作階段期間的設定，然後顯示新的身分提供者值。這在您搭配 Redshift 和 IAM Identity Center 使用身分提供者時最常用。如需搭配 Redshift 使用 IAM Identity Center 的詳細資訊，請參閱[將 Redshift 與 IAM Identity Center 連線，為使用者提供單一登入體驗](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html)。

```
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](r_ALTER_SYSTEM.md) 和 [ALTER IDENTITY PROVIDER](r_ALTER_IDENTITY_PROVIDER.md)。

 **設定查詢群組的標籤** 

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

查詢群組標籤是實用的機制，方便用來隔離指令碼中執行的個別查詢或查詢群組。您不需要依 ID 識別和追蹤查詢；可依其標籤進行追蹤。

 **設定產生亂數的 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';
```