CREATE STORAGE LIFECYCLE POLICY¶
在当前或指定的架构中,创建新的 存储生命周期策略,或替换现有策略。该策略对您指定的实参运行表达式,以确定策略附加到的表中哪些行要过期。策略中的实参引用表中的列。
创建策略后,使用 ALTER TABLE 命令将策略添加到表中。
- 另请参阅:
ALTER STORAGE LIFECYCLE POLICY、DESCRIBE STORAGE LIFECYCLE POLICY、DROP STORAGE LIFECYCLE POLICY、SHOW 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>' , ... ] ) ]
必填参数¶
name指定存储生命周期策略标识符的字符串。这对于架构必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object")。放在双引号内的标识符也区分大小写。有关更多信息,请参阅 标识符要求。
AS ( arg_name arg_type [ , ... ] )策略的签名。签名中必须至少包含一个实参。
签名指定了一组属性,在确定行是否要过期时必须考虑这些属性。属性值来自数据库对象(表)。
RETURNS BOOLEAN -> body存储生命周期策略的评估结果必须为 true 或 false。查询受存储生命周期策略保护的表的用户会根据
body的写入方式看到输出中的行。
可选参数¶
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-2147483647ARCHIVE_TIER = COLD:
180-2147483647
默认值:未设置
COMMENT = 'string_literal'指定存储生命周期策略的注释。
默认:无值
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 Tag quotas。
访问控制要求¶
权限 |
对象 |
备注 |
|---|---|---|
架构 |
无 |
要对架构中的任何对象执行操作,需要对父数据库和架构的 USAGE 权限。请注意,如果某个角色获授某个架构的任意权限,该角色便能够解析该架构。例如,若某角色被授予 CREATE 权限,则可以在该架构上创建对象,而无需 同时 被授予该架构的 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
OR REPLACE 和 IF NOT EXISTS 子句互斥。它们不能同时用于同一条语句中。
CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
如果您指定了 OR REPLACE,并且该策略已附加到任何对象,则该命令将失败。
您不能将
OR REPLACE和IF 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;