CREATE JOIN POLICY¶
在当前/指定架构中创建新的 联接策略 或替换现有联接策略。
创建联接策略后,使用 ALTER TABLE 命令将该策略分配给表,或使用 ALTER VIEW 命令将该策略分配给视图。或者,您可以在创建表时为其分配联接策略。
- 另请参阅:
语法¶
CREATE [ OR REPLACE ] JOIN POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS JOIN_CONSTRAINT -> <body>
[ COMMENT = '<string_literal>' ]
参数¶
name
联接策略的标识符;对于架构必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多信息,请参阅 标识符要求。
AS () RETURNS JOIN_CONSTRAINT
策略的签名和返回类型。签名不接受任何实参,返回类型为 JOIN_CONSTRAINT,这是一种内部数据类型。所有联接策略都具有相同的签名和返回类型。
body
SQL 表达式,用于确定联接策略的限制。
要定义联接策略的主体,请调用 JOIN_CONSTRAINT 函数,该函数将返回 TRUE 或 FALSE。当函数返回 TRUE 时,查询需要使用联接返回结果。
JOIN_CONSTRAINT 函数的语法是:
JOIN_CONSTRAINT ( { JOIN_REQUIRED => <boolean_expression> } )
其中:
JOIN_REQUIRED => boolean_expression
指定当从已分配联接策略的表或视图中选择数据时,查询是否需要使用联接。
策略的主体不能引用用户定义的函数、表或视图。
允许的联接列在应用策略的表或视图的 CREATE 或 ALTER 语句中指定,而不是在 CREATE JOIN POLICY 语句中指定。
COMMENT = 'string_literal'
添加注释或覆盖联接策略的现有注释。
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE JOIN POLICY |
架构 |
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述。
有关联接策略 DDL 和权限的更多信息,请参阅 管理联接策略。
使用说明¶
如果您要更新现有联接策略,并且需要查看该策略的当前主体,请运行 DESCRIBE JOIN POLICY 命令或 GET_DDL 函数。
OR REPLACE
和IF NOT EXISTS
子句互斥。它们不能同时用于同一条语句中。CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
创建要求查询包含联接的联接策略(当策略应用于这些查询中显示的表和视图时):
CREATE JOIN POLICY jp1 AS () RETURNS JOIN_CONSTRAINT -> JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE);
创建一个联接策略,该策略允许具有 ACCOUNTADMIN 角色的用户来运行没有联接的查询;其他用户必须运行联接查询:
CREATE JOIN POLICY jp2 AS () RETURNS JOIN_CONSTRAINT -> CASE WHEN CURRENT_ROLE() = 'ACCOUNTADMIN' THEN JOIN_CONSTRAINT(JOIN_REQUIRED => FALSE) ELSE JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE) END;