CREATE AGGREGATION POLICY

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

创建聚合策略后,使用 ALTER TABLE 命令将聚合策略分配至表或使用 ALTER VIEW 命令将其分配给视图。

另请参阅:

聚合策略 DDL 引用

语法

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

参数

name

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

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

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

body

SQL 表达式,确定聚合策略的限制。

要定义聚合策略的约束条件,请使用 SQL 表达式调用以下一个或多个函数:

NO_AGGREGATION_CONSTRAINT

当策略主体从此函数返回值时,查询可以不受限制地从聚合约束的表或视图中返回数据。例如,当管理员需要从聚合约束的表或视图中获取未聚合的结果时,策略主体可以调用此函数。

在无实参的情况下调用 NO_AGGREGATION_CONSTRAINT。

AGGREGATION_CONSTRAINT

当策略主体从此函数返回值时,查询必须聚合数据才能返回结果。使用 MIN_GROUP_SIZE 实参指定每个聚合组中必须包含多少个记录。

AGGREGATION_CONSTRAINT 函数的语法是:

AGGREGATION_CONSTRAINT ( MIN_GROUP_SIZE => <integer_expression> )
Copy

其中:

MIN_GROUP_SIZE => integer_expression

指定在对聚合约束表或视图进行的查询中,其返回的组中必须包含多少行 实体

10 作为实参传递给函数是有区别的。两者都需要聚合结果。

  • 传递 1 还要求每个聚合组至少包含一个来自聚合约束表的记录。因此,对于外部联接,来自聚合约束表的至少一个记录必须匹配来自未受保护表的记录。

  • 传递 0 允许查询返回完全由另一个表中的记录组成的组。因此,对于聚合约束表和未受保护表之间的外部联接,组可以由未受保护表中不匹配聚合约束表中任何记录的记录组成。

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

COMMENT = 'string_literal'

为聚合策略添加注释或覆盖现有注释。

访问控制要求

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

权限

对象

备注

CREATE AGGREGATION POLICY

架构

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

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

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

有关聚合策略 DDL 和权限的其他详细信息,请参阅 权限和命令

使用说明

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

  • 关于元数据:

    注意

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

  • 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> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。

示例

创建一个聚合策略,该策略要求查询返回包含五行或更多行的组:

CREATE AGGREGATION POLICY my_policy AS ()
  RETURNS AGGREGATION_CONSTRAINT ->
  AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
Copy

创建一个聚合策略,该策略允许具有角色 admin 的用户返回未聚合的结果,同时要求所有其他查询返回包含五行或更多行的组:

CREATE AGGREGATION POLICY my_policy AS ()
  RETURNS AGGREGATION_CONSTRAINT ->
    CASE
      WHEN CURRENT_ROLE() = 'ADMIN'
        THEN NO_AGGREGATION_CONSTRAINT()
      ELSE AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5)
    END;
Copy
语言: 中文