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 的标准标识符规则的标识符。有关更多信息,请参阅名称和标识符。不允许使用分隔标识符。

LOCAL

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

SEED TO value

设置由 RANDOM 函数用于生成随机数的内部种子。

SET SEED 采用介于 0 和 1 之间的数,并将此数乘以 (231-1) 以用于 RANDOM 函数 函数。如果在多次调用 RANDOM 之前使用 SET SEED,则 RANDOM 会按可预测的顺序生成数字。

parameter_name

要设置的参数的名称。有关参数的信息,请参阅修改服务器配置

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

DEFAULT

将参数设置为默认值。

示例

更改当前会话的参数

以下示例设置日期样式:

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;

有关更多信息,请参阅 实施工作负载管理

更改会话的默认身份命名空间

数据库用户可以设置 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)

查询组标签是一个非常有用的机制,可用于隔离作为脚本一部分运行的单个查询或查询组。您不需要通过查询 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';