- 类别:
上下文函数 (会话)
SET_SYS_CONTEXT¶
为指定命名空间中的指定键设置值,稍后可以使用 SYS_CONTEXT 检索该值。
此函数有两种操作模式:
**不可变会话属性**(
SNOWFLAKE$SESSION_ATTRIBUTES命名空间):设置自定义会话属性,这些属性一经设置便不可变,并在会话持续期间一直存在。对于跟踪有关会话的元数据非常有用,例如应用程序上下文、用户属性或审计信息。
语法¶
实参¶
'namespace'用于存储键值对的命名空间。支持的命名空间:
SNOWFLAKE$SESSION_ATTRIBUTES– 存储不可变的自定义会话属性。属性名称 区分大小写。任何其他字符串(或 NULL)– 将命名空间视为会话变量名称的前缀,类似于 SET 命令。命名空间 区分大小写。
'key'要设置的属性或变量的名称。所有键名均 区分大小写。
'value'要分配的值。该值必须是字符串或计算结果为字符串的表达式。
返回¶
该函数会返回 VARCHAR 值:
对于
SNOWFLAKE$SESSION_ATTRIBUTES命名空间:始终返回 NULL(因为不可变属性不能有先前的值)。如果已在当前会话中设置该属性,则该函数将引发错误。对于其他命名空间:返回会话变量的先前值,如果变量先前不存在,则返回 NULL。这与 SET 命令的行为一致。
访问控制要求¶
设置自定义会话属性不需要特殊权限。任何用户都可以在自己的会话中设置属性。
使用说明¶
对于 SNOWFLAKE$SESSION_ATTRIBUTES 命名空间(不可变属性):
属性 不可变。设置属性后,任何再次设置该属性的尝试(即使设置为相同的值)都将导致错误。
属性名称 区分大小写。
app_context、App_Context和APP_CONTEXT被视为三个不同的属性。属性是 会话范围。它们在会话期间持续存在,并且对其他会话不可见。
要检索属性值,请使用 SYS_CONTEXT(SNOWFLAKE$SESSION_ATTRIBUTES 命名空间):
SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', '<key>')。
对于其他命名空间(会话变量):
变量名称 区分大小写。
user_id和USER_ID被视为不同的变量。变量可以 更新。设置已存在的变量将返回以前的值,并使用新值对其进行更新。
命名空间(如果提供)用作前缀:
SET_SYS_CONTEXT('myns', 'mykey', 'val')创建一个名为myns.mykey的变量。可以使用
SYS_CONTEXT('<namespace>', '<key>')检索变量,设置变量时必须使用完全一样的大小写。
一般注意事项:
如果您在 Shell 的双引号字符串中指定函数调用,请使用反斜杠 (
\) 转义$字符,以免$session_attributes被解释为 Shell 变量。
示例¶
示例 1:不可变的会话属性(SNOWFLAKE$SESSION_ATTRIBUTES 命名空间)
设置自定义属性以跟踪应用程序上下文:
检索属性值(注意:属性名称区分大小写):
设置属性后,尝试更改它会导致错误:
属性名称区分大小写:
示例 2:会话变量(其他命名空间)
设置带有命名空间前缀的会话变量:
变量会以提供的完全大小写形式进行存储:myapp.user_id。进行检索:
更新变量(返回上一个值):