创建和管理存储生命周期策略

以下章节介绍如何在表上创建、重新创建和管理存储生命周期策略。

创建存储生命周期策略

要创建存储生命周期策略,请使用 CREATE STORAGE LIFECYCLE POLICY 命令。

创建存储生命周期策略时,可以选择 归档层,并可选择设置归档期(以天为单位)。如果设置归档期,Snowflake 会将与策略表达式匹配的表行移动到成本较低的存储层,并在行过期之前保留指定的天数。Snowflake 还对您附加策略的任何表启用变更跟踪。

例如:

CREATE STORAGE LIFECYCLE POLICY my_slp
  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 = 90;

备注

有关使用具有归档存储策略的表时的注意事项,请参阅 归档存储策略

最佳实践:对基于时间的表达式使用日期转换

为了提高性能并确保一致的策略执行,请在比较时间值时将时间戳转换为策略表达式中的日期。

例如,考虑以下策略表达式:

event_time < DATEADD(DAY, -400, CURRENT_TIMESTAMP())

此比较包括时间戳的时间部分,这可能会导致不一致的行为。当数据按 event_time 的时间顺序插入时,策略的执行时间会影响从每个文件中删除的行数。

要避免这种不一致的行为,请将时间戳转换为表达式中的日期:

event_time < TO_DATE(DATEADD(DAY, -400, CURRENT_TIMESTAMP()))

无论一天中的什么时间,这种方法都可以提供一致的策略执行。

重新创建存储生命周期策略

此功能扩展了用于重新创建指定存储生命周期策略的 GET_DDL 命令。如果要更改策略的归档层,可以执行此操作。

要重新创建名为 my_slp 的存储生命周期策略,请返回 DDL,如以下示例所示:

SELECT GET_DDL('policy','my_slp');

输出:

---------------------------------------------------------------------+
                      GET_DDL('POLICY','SLP')                        |
---------------------------------------------------------------------+
create or replace storage lifecycle policy SLP 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_FOR_DAYS = 365                                             |
;                                                                    |
---------------------------------------------------------------------+

管理表的存储生命周期策略

使用以下选项管理存储生命周期策略附件。

将策略附加到表中

您可以使用一个存储生命周期策略管理多个表。创建或更改表时附加策略。

要创建表并使用指定的列将策略附加到新表中,请使用 CREATE TABLE,如以下示例所示。

备注

  • 您必须具有应用该策略所需的权限。有关所需权限的信息,请参阅 Storage lifecycle policy privileges

  • 一个表只能附加一个存储生命周期策略。

  • 列数必须与策略函数签名中的实参数匹配,并且列数据必须与实参类型兼容。

  • 如果重命名表列,则关联的策略不受影响。Snowflake 使用列 IDs 将策略与表关联。

  • 为了评估和应用存储生命周期策略表达式,Snowflake 会在内部暂时绕过表上的任何治理策略。

CREATE TABLE my_table
  ...
  WITH STORAGE LIFECYCLE POLICY my_slp ON (col1);

要使用指定列将策略附加到现有表,请使用 ALTER TABLE,如以下示例所示:

ALTER TABLE my_table ADD STORAGE LIFECYCLE POLICY my_slp
  ON (col1);

将策略作为一次性操作应用

如果您只需要使历史数据过期或归档(一次性操作),我们建议采用以下操作过程:

  1. 创建存储生命周期策略,然后将其附加到表中。

  2. 等待策略完成执行,然后归档或使数据过期。

    监控 INFORMATION_SCHEMA.STORAGE_LIFECYCLE_POLICY_HISTORY 表函数,以确认该过程是否完成。

  3. 为防止重复收费,从表中 移除存储生命周期策略

    存储生命周期策略 每次执行 都会产生成本。

这种方法可确保您只需为一次执行付费,而不必为已经处理完所有符合条件数据的策略承担每日持续费用。有关成本的更多信息,请参阅 存储生命周期策略计费

从表中移除策略

要从表中移除存储生命周期策略,请使用 ALTER TABLE,如以下示例所示:

ALTER TABLE my_table DROP STORAGE LIFECYCLE POLICY;
  • 此命令将移除此表的所有未来策略执行。

  • 运行策略执行可能会在从表中删除之前完成。

  • 要删除存储生命周期策略,您必须对策略附加到的表具有 OWNERSHIP 权限。