CREATE STORAGE LIFECYCLE POLICY

在当前或指定的架构中,创建新的 存储生命周期策略,或替换现有策略。该策略对您指定的实参运行表达式,以确定策略附加到的表中哪些行要过期。策略中的实参引用表中的列。

创建策略后,使用 ALTER TABLE 命令将策略添加到表中。

另请参阅:

ALTER STORAGE LIFECYCLE POLICYDESCRIBE STORAGE LIFECYCLE POLICYDROP STORAGE LIFECYCLE POLICYSHOW STORAGE LIFECYCLE POLICIES

语法

CREATE [ OR REPLACE ] STORAGE LIFECYCLE POLICY [ IF NOT EXISTS ] <name>
  AS ( <arg_name> <arg_type> [ , ... ] )
  RETURNS BOOLEAN -> <body>
  [ ARCHIVE_TIER = { COOL | COLD } ]
  [ ARCHIVE_FOR_DAYS = <number_of_days> ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

必填参数

name

指定存储生命周期策略标识符的字符串。这对于架构必须是唯一的。

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

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

AS ( arg_name arg_type [ , ... ] )

策略的签名。签名中必须至少包含一个实参。

签名指定了一组属性,在确定行是否要过期时必须考虑这些属性。属性值来自数据库对象(表)。

RETURNS BOOLEAN -> body

存储生命周期策略的评估结果必须为 true 或 false。查询受存储生命周期策略保护的表的用户会根据 body 的写入方式看到输出中的行。

body

Snowflake 用于确定哪些行要过期的 SQL 表达式。

要转换数据,您可以使用内置函数,例如 条件表达式函数用户定义的函数 (UDFs)。

备注

目前,存储生命周期策略主体中仅支持 SQL 和 JavaScript UDFs。

可选参数

ARCHIVE_TIER = { COOL | COLD }

指定用于归档行的存储层类型。为策略设置 ARCHIVE_TIER 后,您无法对其进行修改。有关更多信息,请参阅 归档存储层

如果您未指定此参数,则该策略将作为过期策略,直接删除行而不进行归档。

  • COOL 要求您设置 90 天或更长时间的归档期 (ARCHIVE_FOR_DAYS),才能启用归档功能。

  • COLD 要求您设置 180 天或更长时间的归档期 (ARCHIVE_FOR_DAYS),才能启用归档功能。

默认:无值

ARCHIVE_FOR_DAYS = number_of_days

指定在归档存储中保留符合策略表达式的行的天数。如果已设置,Snowflake 会根据您为 ARCHIVE_TIER 选择的值将数据移动到归档存储中。如果未设置,Snowflake 会使表中的行过期,而不会将数据归档。

值:

  • ARCHIVE_TIER = COOL: 90 - 2147483647

  • ARCHIVE_TIER = COLD: 180 - 2147483647

默认值:未设置

COMMENT = 'string_literal'

指定存储生命周期策略的注释。

默认:无值

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 Tag quotas

访问控制要求

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

权限

对象

备注

CREATE STORAGE LIFECYCLE POLICY

架构

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

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

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

使用说明

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

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

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

    • 如果您指定了 OR REPLACE,并且该策略已附加到任何对象,则该命令将失败。

    • 您不能将 OR REPLACEIF NOT EXISTS 一起用于此命令。

    • 如果要替换现有存储生命周期策略,并且需要查看该策略的当前定义,请调用 GET_DDL 函数或运行 DESCRIBE STORAGE LIFECYCLE POLICY 命令。

  • 在策略主体中包含一个或多个 子查询 可能会导致错误。如果可能,限制子查询的数量,限制 JOIN 操作的数量,并简化 WHERE 子句条件。

  • 如果策略已附加到表,则无法更改策略签名。如果需要更改签名,请使用 DROP STORAGE LIFECYCLE POLICY 命令并创建新策略。

  • 关于元数据:

    注意

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

示例

以下生命周期策略将数据从与已关闭账户对应且超过 60 天的行移动到归档存储(COOL 层)。

CREATE STORAGE LIFECYCLE POLICY example_policy
  AS (event_ts TIMESTAMP, account_id NUMBER)
  RETURNS BOOLEAN ->
    event_ts < DATEADD(DAY, -60, CURRENT_TIMESTAMP())
    AND EXISTS (
      SELECT 1 FROM closed_accounts
      WHERE id = account_id
    )
  ARCHIVE_TIER = COOL
  ARCHIVE_FOR_DAYS = 180;
Copy
语言: 中文