CREATE PROJECTION POLICY

在当前/指定的架构中创建一个新的 投影策略,或替换现有的投射策略。

创建投影策略后,使用 ALTER TABLE ...ALTER COLUMN 命令将投影策略应用于表列,或使用 ALTER VIEW 命令将投影策略应用于视图列。

另请参阅:

投影策略 DDL 引用

本主题内容:

语法

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

参数

name

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

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

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

body

SQL 表达式,确定是否投射列。

该表达式可以包含 CASE 和其他逻辑语句,但必须调用 PROJECTION_CONSTRAINT 函数:

PROJECTION_CONSTRAINT(ALLOW=>{TRUE|FALSE}, ENFORCEMENT=><enforcement_style>)
Copy
  • :code:`ALLOW`(布尔)– TRUE 允许对列进行投影。FALSE 防止对列进行投影,行为由 ENFORCEMENT 指定。FALSE 仅影响最终结果表中显示的列。

  • :code:`ENFORCEMENT`(字符串,可选)– 如果 ALLOW=FALSE,则指定若查询包含受保护列会发生什么情况。支持的值:

    • FAIL – 如果最外层的查询中包含受保护列,则查询将失败。

    • NULLIFY – 受保护列中的所有行都返回值 NULL。

    默认值:FAIL

COMMENT = 'string_literal'

为投影策略添加注释或覆盖现有注释。

访问控制要求

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

权限

对象

备注

CREATE PROJECTION POLICY

架构

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

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

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

有关投影策略 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 OR REPLACE PROJECTION POLICY do_not_project AS ()
  RETURNS PROJECTION_CONSTRAINT ->
  PROJECTION_CONSTRAINT(ALLOW => false);
Copy

analyst 自定义角色投影一列,否则允许查询,但将所有受保护列值替换为 NULL:

CREATE OR REPLACE PROJECTION POLICY project_analyst_only AS ()
  RETURNS PROJECTION_CONSTRAINT ->
    CASE
      WHEN CURRENT_ROLE() = 'ANALYST'
        THEN PROJECTION_CONSTRAINT(ALLOW => true)
      ELSE PROJECTION_CONSTRAINT(ALLOW => false, ENFORCEMENT => 'NULLIFY')
    END;
Copy
语言: 中文