ストレージライフサイクルポリシーの作成と管理¶
注釈
ストレージライフサイクルポリシー は現在、政府リージョンではご利用いただけません。
次のセクションでは、テーブルのストレージライフサイクルポリシーを作成、再作成、および管理する方法について説明します。
ストレージライフサイクルポリシーの作成¶
ストレージのライフサイクルポリシーを作成するには、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 によってデータが時系列で挿入されるとき、ポリシーの実行時間は、各ファイルから削除される行数に影響します。
この問題を回避するには、式でタイムスタンプを日付に変換します。
TO_DATE(event_time) < TO_DATE(DATEADD(DAY, -400, CURRENT_TIMESTAMP()))
このアプローチにより、時刻に関係なく一貫したポリシーの実行が提供されます。
ストレージライフサイクルポリシーの再作成¶
この機能は GET_DDL コマンドを拡張して、指定されたストレージライフサイクルポリシーを再作成します。ポリシーのアーカイブティアを変更する場合は、これを実行する場合があります。
DDL を返して my_slp という名前のストレージライフサイクルポリシーを再作成します。
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 |
; |
---------------------------------------------------------------------+
テーブルのストレージライフサイクルポリシーの管理¶
次のオプションを使用して、ストレージライフサイクルポリシーの添付を管理します。
テーブルへのポリシーの添付¶
1つのストレージライフサイクルポリシーで複数のテーブルを管理できます。テーブルを作成または変更するときにポリシーを添付します。
CREATE TABLE を使用してテーブルを作成し、指定された列を使用してポリシーを新しいテーブルに添付します。
注釈
ポリシーを適用するために必要な権限を持っている必要があります。必要な権限については、 Storage lifecycle policy privileges をご参照ください。
テーブルには、ストレージライフサイクルポリシーを1つだけ添付できます。
列の数はポリシー関数署名の引数の数と一致する必要があり、列データは引数の型に対応する必要があります。
テーブル列の名前を変更しても、関連付けられたポリシーは影響を受けません。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回限りの操作としてポリシーを適用する¶
履歴データを一度だけ期限切れまたはアーカイブする必要がある場合(1回限りの操作)は、次のアプローチをお勧めします。
ストレージライフサイクルポリシーを作成して、テーブルに添付します。
ポリシーが実行され、データをアーカイブまたは期限切れにするのを待ちます。INFORMATION_SCHEMA.STORAGE_LIFECYCLE_POLICY_HISTORY テーブル関数をモニターし、プロセスが完了したことを確認します。
繰り返しの請求を防ぐには、テーブルから ストレージライフサイクルポリシーの削除 を行います。ストレージライフサイクルポリシーには、実行ごと のコストが発生します。
このアプローチでは、対象となるすべてのデータをすでに処理したポリシーに対して継続的な日次料金を支払うのではなく、1回の実行に対してのみ支払います。コストの詳細については、ストレージライフサイクルポリシーの請求 をご参照ください。
テーブルからポリシーを削除する¶
ALTER TABLE を使用してテーブルからストレージライフサイクルポリシーを削除します。
ALTER TABLE my_table DROP STORAGE LIFECYCLE POLICY;
これにより、このテーブルの今後のポリシー実行がすべて削除されます。
ポリシーの実行は、テーブルからドロップされる前に完了する場合があります。
ストレージライフサイクルポリシーをドロップするには、ポリシーがアタッチされているテーブルに対する OWNERSHIP 権限が必要です。