すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:ローカルバックアップ

最終更新日:Mar 01, 2026

MaxCompute では、データが変更されるたびに自動的にバックアップが実行され、バックアップデータは設定可能な期間(保持期間)にわたって保存されます。データを誤って削除または上書きした場合でも、保持期間内であれば、任意の以前のバージョンへ復元できます。

Backup and restoration

仕組み

  • 常時有効 —— デフォルトで有効化されており、保持期間は 24 時間です。外部ストレージは不要で、追加コストも発生しません。

  • 継続的バックアップ —— データの変更ごとにバックアップがトリガーされるため、スケジュールされたバックアップ間隔内でデータ変更が見逃されることはありません。

  • 高速復元 —— 復元操作は追加のコンピューティングリソースを消費しません。単一のコマンドで、テーブル、パーティション、または特定のバージョンを復元できます。

制限事項

  • マテリアライズドビュー、オブジェクトテーブル、および外部テーブルはサポートされていません。

  • クラスターテーブルは復元できません。

  • PURGE TABLE コマンドをテーブルに対して実行した後は、パージされたデータを復元できません。

  • 削除されたテーブルまたはパーティション(Delta テーブルを含む)は、特定のログシーケンス番号(LSN)へ直接復元できません。まずテーブルを復元し、その後対象の LSN へ復元してください。

Delta テーブルの制限事項

  • 削除された Delta テーブルまたはパーティションは完全に復元できますが、特定のマイナーバージョンへの復元はできません。特定のマイナーバージョンをクエリするには、タイムトラベルを使用します。

  • 削除されたテーブルを復元した後の動作:

    • テーブルのクエリを[削除前]の時点で実行すると、削除が行われなかったかのようにデータが返されます。

    • ある時点で[削除と解凍の間]にクエリを実行すると、データを返しません(システムはこれを削除済みとして扱います)。

    • [復元後]」の時点でのクエリ実行では、削除も復元も行われなかったかのようにデータが返されます。復元されたデータは増分データとして扱われません。

    • 復元前の削除済みパーティションに対するクエリでは、エラーではなく結果が空になります(存在しないパーティションに対する通常のクエリと同様です)。

  • 1 回の「削除 → 復元」サイクルごとに、新しいコミットタイムスタンプおよびバージョン番号が生成されます。パーティションテーブルを復元する場合、各パーティションごとに個別のバージョンが作成されます。

保持期間の設定

MaxCompute がバックアップデータを保持する日数を設定します。有効範囲は 0~30 日です。デフォルト値は 1(24 時間)です。0 に設定すると、バックアップ機能が無効化されます。

-- 保持期間を 7 日間に設定
setproject odps.timemachine.retention.days=7;
保持期間の変更は、Alibaba Cloud アカウントまたはプロジェクト管理者のみが実行できます。

保持期間変更後の動作:

変更内容影響
期間の延長当日から適用されます
期間の短縮MaxCompute が、新しい期間を超えるバックアップデータを自動的に削除します

現在の設定を表示するには、MaxCompute クライアント (odpscmd)setproject; を実行し、odps.timemachine.retention.days の値を確認します。

バックアップ履歴の表示

すべてのテーブル(削除済みテーブルを含む)の一覧表示

SHOW HISTORY FOR tables;

名前でフィルタリングするには:

SHOW HISTORY FOR tables LIKE test_restore_1;

出力例:

Name                	Id                              	Type            	IsPartitioned 	CreateTime         	DropTime
test_restore_1      	a0b06367bd054d17a55505aa31601b89	MANAGED_TABLE   	FALSE         	2025-07-18 16:32:13
プロジェクトに対する一覧表示権限が必要です。詳細については、「MaxCompute の権限」をご参照ください。

テーブルのバージョン履歴の表示

SHOW HISTORY FOR TABLE <table_name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <offset>];

実行例:

SHOW HISTORY FOR TABLE test_restore_1;

出力例:

ObjectType	ObjectId                        	ObjectName          	VERSION(LSN)    	Time               	Operation
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000001	2025-07-18 16:32:14	CREATE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000002	2025-07-18 16:52:08	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000003	2025-07-18 16:52:12	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000004	2025-07-18 16:52:14	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000005	2025-07-18 16:52:17	OVERWRITE

このコマンドを実行するには、テーブルに対する ShowHistory 権限が必要です。テーブルがすでに削除されている場合、このコマンドはエラーを返します。その場合は代わりに SHOW HISTORY FOR tables LIKE <table_name>; を使用してください。

削除済みテーブルのバージョン履歴の表示

SHOW HISTORY FOR tables から取得したテーブル ID を使用します:

SHOW HISTORY FOR TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');

この操作にはプロジェクトに対する List 権限が必要です。

パーティションのバージョン履歴の表示

-- パーティション仕様による指定
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION(ds='20250701');

-- パーティション ID による指定(削除済みパーティションの場合)
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION('id'='271aebf3e17a4a8e9f6b35733bf63db4');

この操作にはテーブルに対する ShowHistory 権限が必要です。

複数のパーティションを一度に表示するには:

SHOW HISTORY FOR TABLE test_restore_part_1 ('id'='fbee66b56cf544d2a9999d5d0ce5d352')
  PARTITION(ds='20250701') PARTITION(ds='20250702');

非パーティションテーブルの復元

削除済みテーブルの復元

RESTORE TABLE <table_name> ('id'='<table_id>');
テーブル名は既存のテーブルと重複してはなりません。必要に応じて、既存のテーブルを事前にリネームしてください。

実行例:

-- 衝突するテーブルをリネーム
ALTER TABLE test_restore_2 RENAME TO test_restore_2_rename;

-- 削除済みテーブルを復元
RESTORE TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');

必要な権限:

  • 既存のテーブル:テーブルに対する Update 権限

  • 存在しないテーブル:プロジェクトに対する CreateTable 権限

特定のバージョンへのテーブル復元

RESTORE TABLE <table_name> TO LSN '<lsn>';

実行例:

RESTORE TABLE test_restore_1 TO LSN '0000000000000004';

SELECT * FROM test_restore_1;
-- 出力結果:
-- +------------+
-- | colname    |
-- +------------+
-- | 2          |
-- +------------+

特定のバージョンを新規テーブルとして復元

RESTORE TABLE <table_name> TO LSN '<lsn>' AS <new_table_name>;

このコマンドの動作は、対象テーブルの状態によって以下の 3 通りに分かれます:

シナリオ動作
対象テーブルが存在しない場合復元データで新規テーブルが作成されます
対象テーブルが存在し、スキーマが一致する場合対象テーブルのデータが上書きされます
対象テーブルが存在し、スキーマが異なる場合エラー ODPS-0110061 で失敗します

実行例 —— 復元とリネーム:

RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new;

SELECT * FROM test_restore_new;
-- 出力結果:
-- +------------+
-- | colname    |
-- +------------+
-- | 1          |
-- +------------+

パーティションテーブルの復元

削除済みパーティションテーブルの復元

RESTORE TABLE <table_name> ('id'='<table_id>');

削除時に存在していたすべてのパーティションが復元されます。

削除済みパーティションの復元

既存のテーブルに対して、1 つ以上の削除済みパーティションを復元します:

RESTORE TABLE <table_name> PARTITION('id'='<partition_id>') [PARTITION('id'='<partition_id>')];
対象テーブルは存在している必要があります。テーブル自体も削除されている場合は、まずテーブルを復元してください。

実行例:

-- パーティション ID の確認
SHOW HISTORY FOR TABLE test_restore_part_y;

-- 2 つの削除済みパーティションを復元
RESTORE TABLE test_restore_part_y
  PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa')
  PARTITION('id'='8c85184ec0b44fba8198274401df2519');

パーティションを特定のバージョンへ復元

RESTORE TABLE <table_name>
  PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
  TO LSN '<lsn>';

複数のパーティションを同一の LSN へ復元する場合、各パーティションについて、その LSN が存在すれば指定 LSN へ、存在しなければ直近の先行 LSN へ復元されます。

例: パーティション pt1 の LSN が 100、102、104、106 であり、パーティション pt2 の LSN が 101、103、104、105 であるとき、両方を LSN 102 へ復元すると、pt1 は LSN 102 へ、pt2 は LSN 101 へ復元されます。

RESTORE TABLE test_restore_part_y
  PARTITION(ds='20250701') PARTITION(ds='20250702')
  TO LSN '0000000000000010';

パーティションを特定のバージョンとして新規テーブルへ復元

RESTORE TABLE <table_name>
  PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
  TO LSN '<lsn>' AS <new_table_name>;

Delta テーブルの実行例

Delta テーブルの作成、データ挿入、削除および復元

-- Delta テーブルの作成
CREATE TABLE mf_dt (pk BIGINT NOT NULL PRIMARY KEY,
                    val BIGINT NOT NULL)
                    PARTITIONED BY (dd STRING, hh STRING)
                    TBLPROPERTIES ("transactional"="true");

-- データの挿入
INSERT OVERWRITE TABLE mf_dt PARTITION(dd='01', hh='01')
  VALUES (1, 1), (2, 2), (3, 3);

INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01')
  VALUES (3, 30), (4, 4), (5, 5);

SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- 出力結果:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1  | 1   | 01 | 01 |
-- | 4  | 4   | 01 | 01 |
-- | 5  | 5   | 01 | 01 |
-- | 2  | 2   | 01 | 01 |
-- | 3  | 30  | 01 | 01 |
-- +----+-----+----+----+

復元用のテーブル ID の取得

DESC EXTENDED mf_dt; を実行し、拡張情報セクション内の TableID フィールドを確認します:

TableID:  cd607cd938dc4ca6886dd12212995604

テーブルの削除および復元

DROP TABLE mf_dt;

RESTORE TABLE mf_dt ('id' = 'cd607cd938dc4ca6886dd12212995604');

-- データの検証
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- 削除前のデータと同じものが返されます。

パーティションの削除および復元

-- パーティション ID の取得
SHOW HISTORY FOR TABLE mf_dt;

-- パーティションの削除
ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01');

-- パーティションの復元
RESTORE TABLE mf_dt PARTITION('id' = '51d38cc9ded344cf99188cd1a806e5d2');

-- データの検証
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- 削除前のデータと同じものが返されます。

復元済みテーブルにおけるタイムトラベル

Delta テーブルを復元した後も、タイムトラベルによるクエリは引き続き利用可能です:

-- 特定のバージョンをクエリ
SELECT * FROM mf_dt version AS OF 2 WHERE dd = '01' AND hh = '01';
-- 出力結果:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1  | 1   | 01 | 01 |
-- | 3  | 3   | 01 | 01 |
-- | 2  | 2   | 01 | 01 |
-- +----+-----+----+----+

-- 最新バージョンをクエリ
SELECT * FROM mf_dt version AS OF get_latest_version('mf_dt')
  WHERE dd = '01' AND hh = '01';
-- 現在のデータが返されます。

データファイルのクリーンアップ(Delta テーブル)

Delta テーブルでは、タイムトラベル期間内の既存データが保持されるため、追加のストレージコストが発生します。システムは、以下の条件が [すべて] 満たされた場合に、1 日以内に不要な既存データを自動的に削除します:

  • データがタイムトラベル期間より古いものであること。(テーブルでタイムトラベルが無効化されている場合は、すべての履歴データが該当します。)

  • データがライフサイクルを超過したか、削除され、[および] バックアップ保護期間を超過しています。

「履歴データ」とは、ゴミ箱ディレクトリへ移動されたデータファイルを指します。ライフサイクルの超過、削除操作、コンパクション実行、INSERT OVERWRITE の実行など、さまざまな操作によってデータファイルがゴミ箱へ移動されます。

PURGE による強制クリーンアップ

通常は、システムによる自動クリーンアップを許可してください。緊急時(例:過剰なファイル数がディスクの不安定性を引き起こしている場合、または履歴データが予期せぬコスト増加を招いている場合など)のみ、PURGE TABLE を使用してください。

PURGE TABLE <table_name>;
警告

このコマンドを実行した後、タイムトラベルクエリで履歴データが返されなくなる場合があります。

例:

CREATE TABLE mf_ttt (pk BIGINT NOT NULL PRIMARY KEY,
                     val BIGINT NOT NULL)
                     TBLPROPERTIES ("transactional"="true");

INSERT INTO TABLE mf_ttt VALUES (1, 1), (2, 2);
INSERT INTO TABLE mf_ttt VALUES (2, 20), (3, 3);

-- タイムトラベルでバージョン 2 のデータを取得
SELECT * FROM mf_ttt version AS OF 2;
-- 出力結果:
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1  | 1   |
-- | 2  | 2   |
-- +----+-----+

-- コンパクションを実行後も、タイムトラベルは正常に動作
ALTER TABLE mf_ttt compact major;
SELECT * FROM mf_ttt version AS OF 2;
-- 上記と同じ結果

-- PURGE 実行後、タイムトラベルの結果が変化
PURGE TABLE mf_ttt;
SELECT * FROM mf_ttt version AS OF 2;
-- 出力結果:
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1  | 1   |
-- | 3  | 3   |
-- | 2  | 20  |
-- +----+-----+

コマンドリファレンス

シナリオコマンド説明
保持期間の設定setproject odps.timemachine.retention.days=<days>;保持期間(0~30 日)を設定します。デフォルト値は 1 です。
setproject;保持期間を含む、プロジェクトの現在の設定を表示します。
バックアップ履歴の表示SHOW HISTORY FOR tables [LIKE <name>];削除済みテーブルを含むすべてのテーブルを一覧表示します。List 権限が必要です。
SHOW HISTORY FOR TABLE <name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <n>];テーブルのバージョン履歴を表示します。ShowHistory 権限が必要です。
SHOW HISTORY FOR TABLE <name> ('id'='<id>');ID を指定して削除済みテーブルのバージョン履歴を表示します。List 権限が必要です。
SHOW HISTORY FOR TABLE <name> <partition_spec>;パーティションのバージョン履歴を表示します。ShowHistory 権限が必要です。
SHOW HISTORY FOR TABLE <name> PARTITION('id'='<id>');ID を指定して削除済みパーティションのバージョン履歴を表示します。
データの復元RESTORE TABLE <name> ('id'='<id>');削除済みテーブルまたはパーティションを復元します。
RESTORE TABLE <name> TO LSN '<lsn>';テーブルを特定のバージョンへ復元します。
RESTORE TABLE <name> TO LSN '<lsn>' AS <new_name>;テーブルを特定のバージョンへ復元し、新規(または既存)テーブルとして保存します。
RESTORE TABLE <name> PARTITION('id'='<id>') [...];1 つ以上の削除済みパーティションを復元します。
RESTORE TABLE <name> <partition_spec> [...] TO LSN '<lsn>';パーティションを特定のバージョンへ復元します。
RESTORE TABLE <name> <partition_spec> [...] TO LSN '<lsn>' AS <new_name>;パーティションを特定のバージョンへ復元し、新規テーブルとして保存します。
クリーンアップPURGE TABLE <name>;ゴミ箱内の履歴データを強制削除します。

注意事項

  • すべてのバックアップおよび復元コマンドを利用するには、最新版の MaxCompute クライアント を使用してください。

  • バックアップテーブルは、データが変更された場合にのみ作成されます。変更がない場合は、バックアップエントリは作成されません。

  • 保持期間を超過したバックアップデータは自動的に削除され、復元またはクエリできなくなります。

  • 必要な権限についての詳細については、「MaxCompute の権限」をご参照ください。