SET - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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;

请参阅 实施工作负载管理

设置查询组的标签

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