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 权限。

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

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

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

使用说明

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

  • OR REPLACEIF NOT EXISTS 子句互斥。它们不能同时用于同一条语句中。

  • 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
语言: 中文