ストレージライフサイクルポリシーの作成と管理

注釈

ストレージライフサイクルポリシー は現在、政府リージョンではご利用いただけません。

次のセクションでは、テーブルのストレージライフサイクルポリシーを作成、再作成、および管理する方法について説明します。

ストレージライフサイクルポリシーの作成

ストレージのライフサイクルポリシーを作成するには、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;
Copy

注釈

アーカイブストレージポリシーを持つテーブルを操作する際の考慮事項については、アーカイブストレージポリシー をご参照ください。

ベストプラクティス:時間ベースの式に日付変換を使用する

パフォーマンスを向上させ、一貫したポリシーの実行を確保するには、時間値を比較するときに、ポリシー式のタイムスタンプを日付に変換します。

たとえば、このポリシー式を考えてみましょう。

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

この比較には、タイムスタンプの時間コンポーネントが含まれます。これが、一貫性のない動作を引き起こす可能性があります。event_time によってデータが時系列で挿入されるとき、ポリシーの実行時間は、各ファイルから削除される行数に影響します。

この問題を回避するには、式でタイムスタンプを日付に変換します。

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

このアプローチにより、時刻に関係なく一貫したポリシーの実行が提供されます。

ストレージライフサイクルポリシーの再作成

この機能は GET_DDL コマンドを拡張して、指定されたストレージライフサイクルポリシーを再作成します。ポリシーのアーカイブティアを変更する場合は、これを実行する場合があります。

DDL を返して my_slp という名前のストレージライフサイクルポリシーを再作成します。

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

出力:

---------------------------------------------------------------------+
                      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                                             |
;                                                                    |
---------------------------------------------------------------------+

テーブルのストレージライフサイクルポリシーの管理

次のオプションを使用して、ストレージライフサイクルポリシーの添付を管理します。

テーブルへのポリシーの添付

1つのストレージライフサイクルポリシーで複数のテーブルを管理できます。テーブルを作成または変更するときにポリシーを添付します。

CREATE TABLE を使用してテーブルを作成し、指定された列を使用してポリシーを新しいテーブルに添付します。

注釈

  • ポリシーを適用するために必要な権限を持っている必要があります。必要な権限については、 Storage lifecycle policy privileges をご参照ください。

  • テーブルには、ストレージライフサイクルポリシーを1つだけ添付できます。

  • 列の数はポリシー関数署名の引数の数と一致する必要があり、列データは引数の型に対応する必要があります。

  • テーブル列の名前を変更しても、関連付けられたポリシーは影響を受けません。Snowflakeは列 IDs を使用してポリシーをテーブルに関連付けます。

  • ストレージライフサイクルポリシー式を評価して適用するために、Snowflakeは内部的および一時的にテーブルに対するガバナンスポリシーをバイパスします。

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

ALTER TABLE を使用して、指定した列を使用して既存のテーブルにポリシーを添付します。

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

1回限りの操作としてポリシーを適用する

履歴データを一度だけ期限切れまたはアーカイブする必要がある場合(1回限りの操作)は、次のアプローチをお勧めします。

  1. ストレージライフサイクルポリシーを作成して、テーブルに添付します。

  2. ポリシーが実行され、データをアーカイブまたは期限切れにするのを待ちます。INFORMATION_SCHEMA.STORAGE_LIFECYCLE_POLICY_HISTORY テーブル関数をモニターし、プロセスが完了したことを確認します。

  3. 繰り返しの請求を防ぐには、テーブルから ストレージライフサイクルポリシーの削除 を行います。ストレージライフサイクルポリシーには、実行ごと のコストが発生します。

このアプローチでは、対象となるすべてのデータをすでに処理したポリシーに対して継続的な日次料金を支払うのではなく、1回の実行に対してのみ支払います。コストの詳細については、ストレージライフサイクルポリシーの請求 をご参照ください。

テーブルからポリシーを削除する

ALTER TABLE を使用してテーブルからストレージライフサイクルポリシーを削除します。

ALTER TABLE my_table DROP STORAGE LIFECYCLE POLICY;
Copy
  • これにより、このテーブルの今後のポリシー実行がすべて削除されます。

  • ポリシーの実行は、テーブルからドロップされる前に完了する場合があります。

  • ストレージライフサイクルポリシーをドロップするには、ポリシーがアタッチされているテーブルに対する OWNERSHIP 権限が必要です。