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>
    | MIN_ROW_COUNT => <integer_expression>, MIN_ENTITY_COUNT => <integer_expression>
    }
)
Copy

其中:

MIN_GROUP_SIZE => integer_expression

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

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

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

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

MIN_ROW_COUNT => integer_expression, MIN_ENTITY_COUNT => integer_expression

如果在聚合策略中使用实体级隐私,则指定在对聚合约束表或视图进行的查询中,其返回的组中必须包含多少行 实体。使用这些参数时,请勿使用 MIN_GROUP_SIZE 参数。如果想要指定行数 实体数,请单独使用 MIN_GROUP_SIZE

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

COMMENT = 'string_literal'

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

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE AGGREGATION POLICY

架构

请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。

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

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

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

使用说明

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

  • 关于元数据:

    注意

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

示例

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

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