テーブルのライフサイクルを設定することで、変更されていないデータを自動的に回収し、データの鮮度を保ちながらストレージコストを削減します。
ライフサイクル
MaxCompute は、設定されたライフサイクル期間を超えてデータに変更がないテーブルまたはパーティションを自動的に回収します。システムは、有効期限が切れたデータを毎日スキャンします。
非パーティション化テーブルの LastModifiedTime がライフサイクル期間を超えた場合、MaxCompute はデータを回収し、テーブルを削除します。
パーティションテーブルの場合、MaxCompute は個々のパーティションの LastModifiedTime に基づいてパーティションを回収します。最後のパーティションが回収された後も、テーブルは残ります。
最後のパーティションが回収された後にテーブルを自動的に削除するには、次のいずれかの方法を使用します。
説明テーブルレベルの設定は、プロジェクトレベルの設定より優先されます。
プロジェクトレベルの設定
-- テーブルの最後のパーティションが回収された後、テーブルを自動的に削除します。 setproject odps.table.lifecycle.deletemeta.on.expiration=true; -- 最後のパーティションが回収された後、デフォルトでテーブルを保持します。 setproject odps.table.lifecycle.deletemeta.on.expiration=false;テーブルレベルの設定
--- テーブルを作成し、ライフサイクル関連パラメーターを設定することで、テーブルの最後のパーティションが回収された後にテーブルが自動的に削除されるようにします。 CREATE TABLE <Table_Name>(id int, name string) partitioned BY (ds string) tblproperties ('lifecycle.deletemeta'='true') lifecycle 1; --- 既存のテーブルにライフサイクル関連パラメーターを設定することで、テーブルの最後のパーティションが回収された後にテーブルが自動的に削除されるようにします。 ALTER TABLE <table_name> SET tblproperties('lifecycle.deletemeta'='true'); -- 最後のパーティションが回収された後、デフォルトでテーブルを保持します。 ALTER TABLE <table_name> SET tblproperties('lifecycle.deletemeta'='false');
注意事項
タスクスケジューリングの依存関係は、ライフサイクル期間が満了した後のデータ回収の妨げにはなりません。
ライフサイクルはパーティションテーブル全体に適用されます。パーティションレベルでライフサイクルを設定することはできません。
回収されたデータは、デフォルトで 1 日間ごみ箱に保持された後、完全に削除され、復元できなくなります。
ライフサイクル期間が満了した直後に回収が実行されない場合があります。実行のタイミングはシステムの可用性に依存します。
データの書き込み、更新、または削除によって LastModifiedTime は更新されますが、ライフサイクルの値を変更しても LastModifiedTime は更新されません。
テーブルのライフサイクルの設定
テーブル作成時のライフサイクルの設定
構文
-- テーブルを作成します。 CREATE [external] TABLE [if not exists] <table_name> [(<col_name> <data_type> [default <default_value>] [comment <col_comment>], ...)] [comment <table_comment>] [partitioned BY (<col_name> <data_type> [comment <col_comment>], ...)] -- 作成するクラスター化テーブルのシャッフルプロパティとソートプロパティを設定します。 [clustered BY | range clustered BY (<col_name> [, <col_name>, ...]) [sorted BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> buckets] -- 外部テーブルでのみ使用します。 [stored by StorageHandler] -- 外部テーブルでのみ使用します。 [with serdeproperties (options)] -- 外部テーブルでのみ使用します。 [location <osslocation>] -- テーブルのライフサイクルを設定します。 lifecycle <days>; -- 既存のテーブルに基づいてテーブルを作成し、そのスキーマを複製します。CREATE TABLE 文を実行し、外部テーブルや、データレイクハウスソリューションの実装に使用する外部プロジェクトの既存テーブルに基づいてテーブルを作成できます。 create table [if not exists] <table_name> like <existing_table_name> [lifecycle <days>];パラメーター
table_name:必須。テーブル名。
days:必須。ライフサイクル期間 (正の整数)。単位:日。
説明このセクションでは、ライフサイクル関連のパラメーターのみを説明します。テーブル作成のパラメーターの詳細については、「テーブルの作成」をご参照ください。
例
-- ライフサイクルが 100 日の test_lifecycle テーブルを作成します。 CREATE TABLE test_lifecycle (key string) lifecycle 100;
既存テーブルのライフサイクルの設定または変更
次の文を実行して、既存のテーブルのライフサイクルを変更します。
構文
ALTER TABLE <Table_Name> SET lifecycle <days>;パラメーター
table_name:必須。テーブル名。
days:必須。新しいライフサイクル期間 (正の整数)。単位:日。
例
-- test_lifecycle テーブルのライフサイクルを 50 日に変更します。 ALTER TABLE test_lifecycle set lifecycle 50;
テーブルのライフサイクルの無効化または有効化
構文
ALTER TABLE <table_name> [<pt_spec>] {enable|disable} lifecycle;パラメーター
table_name:必須。テーブル名。
pt_spec: 省略可能です。対象のパーティションを指定します。 複数レベルのパーティションの場合、
partition_col1=col1_value1, partition_col2=col2_value1...形式ですべてのパーティションキー列を指定します。enable と disable:テーブルまたはパーティションのライフサイクルを有効または無効にします。
説明ライフサイクルを有効にする前に、設定されているライフサイクルの値を確認して、意図しないデータ回収を防いでください。
テーブルレベルの無効化は、パーティションレベルの有効化より優先されます。テーブルのライフサイクルが無効になっている場合、
table disable lifecycleはpt_spec enable lifecycleより優先されます。ライフサイクルを無効にしても、設定は保持されます。無効になっている間も、ライフサイクルの値を変更できます。
例
例 1:
transテーブルのライフサイクルを無効にします。ALTER TABLE trans disable lifecycle;例 2:
transテーブルの dt='20141111' パーティションのライフサイクルを無効にします。ALTER TABLE trans partition (dt='20141111') disable lifecycle;