CREATE JOIN POLICY

在当前/指定架构中创建新的 联接策略 或替换现有联接策略。

创建联接策略后,使用 ALTER TABLE 命令将该策略分配给表,或使用 ALTER VIEW 命令将该策略分配给视图。或者,您可以在创建表时为其分配联接策略。

另请参阅:

联接策略 DDL 引用

语法

CREATE [ OR REPLACE ] JOIN POLICY [ IF NOT EXISTS ] <name>
  AS () RETURNS JOIN_CONSTRAINT -> <body>
  [ COMMENT = '<string_literal>' ]
Copy

参数

name

联接策略的标识符;对于架构必须是唯一的。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

AS () RETURNS JOIN_CONSTRAINT

策略的签名和返回类型。签名不接受任何实参,返回类型为 JOIN_CONSTRAINT,这是一种内部数据类型。所有联接策略都具有相同的签名和返回类型。

body

SQL 表达式,用于确定联接策略的限制。

要定义联接策略的主体,请调用 JOIN_CONSTRAINT 函数,该函数将返回 TRUE 或 FALSE。当函数返回 TRUE 时,查询需要使用联接返回结果。

JOIN_CONSTRAINT 函数的语法是:

JOIN_CONSTRAINT (
  { JOIN_REQUIRED => <boolean_expression> }
  )
Copy

其中:

JOIN_REQUIRED => boolean_expression

指定当从已分配联接策略的表或视图中选择数据时,查询是否需要使用联接。

策略的主体不能引用用户定义的函数、表或视图。

允许的联接列在应用策略的表或视图的 CREATE 或 ALTER 语句中指定,而不是在 CREATE JOIN POLICY 语句中指定。

COMMENT = 'string_literal'

添加注释或覆盖联接策略的现有注释。

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE JOIN POLICY

架构

要对架构中的任何对象执行操作,需要对父数据库和架构的 USAGE 权限。请注意,如果某个角色获授某个架构的任意权限,该角色便能够解析该架构。例如,若某角色被授予 CREATE 权限,则可以在该架构上创建对象,而无需 同时 被授予该架构的 USAGE 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

有关联接策略 DDL 和权限的更多信息,请参阅 管理联接策略

使用说明

  • 如果您要更新现有联接策略,并且需要查看该策略的当前主体,请运行 DESCRIBE JOIN POLICY 命令或 GET_DDL 函数。

  • The OR REPLACE and IF NOT EXISTS clauses are mutually exclusive. They can't both be used in the same statement.

  • CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

示例

创建要求查询包含联接的联接策略(当策略应用于这些查询中显示的表和视图时):

CREATE JOIN POLICY jp1 AS ()
  RETURNS JOIN_CONSTRAINT -> JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE);
Copy

创建一个联接策略,该策略允许具有 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;
Copy
语言: 中文