

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/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'  }
```

## 参数
<a name="r_SET-parameters"></a>

SESSION   
指定设置对当前会话有效。默认值。

*variable\$1name*   
指定为会话设置的上下文变量的名称。  
命名约定是一个用点分隔的、包含两个部分的名称，例如 *identifier.identifier*。只允许使用一个点分隔符。使用遵循 Amazon Redshift 的标准标识符规则的*标识符*。有关更多信息，请参阅[名称和标识符](r_names.md)。不允许使用分隔标识符。

LOCAL   
指定设置对当前事务有效。

SEED TO *value*   
设置由 RANDOM 函数用于生成随机数的内部种子。  
SET SEED 采用介于 0 和 1 之间的数*值*，并将此数乘以 (231-1) 以用于 [RANDOM 函数](r_RANDOM.md) 函数。如果在多次调用 RANDOM 之前使用 SET SEED，则 RANDOM 会按可预测的顺序生成数字。

 *parameter\$1name*   
要设置的参数的名称。有关参数的信息，请参阅[修改服务器配置](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings)。

 *值*   
新的参数值。使用单引号将值设置为特定字符串。如果使用 SET SEED，则此参数包含 SEED 值。

DEFAULT   
将参数设置为默认值。

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

 **更改当前会话的参数** 

以下示例设置日期样式：

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

 **设置工作负载管理的查询组** 

如果查询组在队列定义中作为集群的 WLM 配置的一部分列出，则可将 QUERY\$1GROUP 参数设置为列出的查询组名称。后续查询将分配给关联的查询队列。QUERY\$1GROUP 设置在会话的持续时间内或遇到 RESET QUERY\$1GROUP 命令之前保持有效。

此示例将两个查询作为查询组“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 结合使用的更多信息，请参阅[将 Redshift 与 IAM Identity Center 连接，为用户提供单点登录体验](https://docs.amazonaws.cn/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\$1GROUP 参数为在同一个会话中 SET 命令之后执行的一个或多个查询定义标签。反过来，在执行查询并可将其用于约束从 STL\$1QUERY 和 STV\$1INFLIGHT 系统表以及 SVL\$1QLOG 视图返回的结果时，将记录此标签。

```
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 选项与 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`，并返回 3 个以上的 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';
```