このトピックでは、MaxCompute のバックアップと復元機能について説明し、関連するコマンドと例を示します。
概要
MaxCompute はバックアップと復元機能を提供します。この機能により、MaxCompute は元のデータを特定の期間、自動的にバックアップして保持できます。元のデータとは、削除や変更などの操作が実行されていないデータを指します。データ損失を防ぐために、保持期間内のデータを復元できます。
バックアップと復元機能には、次の利点があります。
自動有効化
この機能は外部ストレージから独立しています。デフォルトでは、すべての MaxCompute プロジェクトのデータの保持期間は 24 時間です。データのバックアップとストレージは無料です。
自動および継続的バックアップ
MaxCompute は変更されたデータを自動的にバックアップします。データを複数回変更した場合、MaxCompute は変更のたびにデータをバックアップします。この機能は、定期的なデータバックアップポリシーと比較して、データ損失をより効率的に防ぐのに役立ちます。
迅速で使いやすいデータ復元
MaxCompute は、複数のバージョンのデータとメタデータを管理するための高度な機能を提供します。バックアップと復元操作は、追加の計算リソースを消費しません。関連するコマンドを実行して、さまざまなボリュームのデータを復元できます。
注意事項
バックアップと復元機能を使用する際は、次の点に注意してください。
MaxCompute クライアントを使用してテーブルのバックアップ情報を表示する場合は、クライアントの最新バージョンをダウンロードすることをお勧めします。以前のバージョンでは、バックアップと回復のパラメーターやテーブルのバックアップ情報を表示できない場合があります。
テーブルを変更するたびにバックアップテーブルが生成されます。テーブルを変更しない場合、バックアップテーブルは生成されません。
バックアップテーブルが保存される日数がプロジェクトに設定されたバックアップデータ保持期間を超えると、MaxCompute はバックアップテーブルを削除します。削除されたバックアップテーブルは復元またはクエリできません。
テーブルに対して purge コマンドを実行した後、テーブル内のデータは復元できません。
ドロップされた Delta テーブルを含む、ドロップされたパーティションまたはテーブルは、指定されたログシーケンス番号 (LSN) に直接復元することはできません。まずパーティションまたはテーブルを復元してから、指定された LSN に復元する必要があります。
Delta Table の制限:
ドロップされたパーティションまたはテーブルを完全に復元できます。ドロップされたパーティションまたはテーブルを特定のマイナーバージョンに復元することはできません。マイナーバージョンのデータをクエリしたい場合は、タイムトラベル機能を使用できます。
ドロップされたテーブルまたはパーティションが復元された後、タイムトラベルと増分クエリの動作は、ドロップ前とほぼ同じです。ただし、次の詳細に注意してください。
テーブルが復元される前にドロップされたテーブルに対してタイムトラベルクエリなどのクエリを実行すると、エラーが報告されます。パーティションが復元される前にドロップされたパーティションに対してクエリを実行すると、通常のクエリと同様にクエリ結果は返されません。
復元されたドロップ済みテーブルに対するタイムトラベルクエリまたは増分クエリに指定されたクエリ時間が、復元時間より前で、ドロップ時間以降である場合、システムはクエリされたデータを削除済みとみなし、クエリ結果は返されません。
復元されたドロップ済みテーブルに対するタイムトラベルクエリまたは増分クエリに指定されたクエリ時間がドロップ時間より前の場合、クエリ結果はドロップ操作が実行されなかった場合と同じになります。
復元されたドロップ済みテーブルに対するタイムトラベルクエリまたは増分クエリに指定されたクエリ時間が復元時間以降の場合、クエリ結果はドロップおよび復元操作が実行されなかった場合と同じになります。復元されたデータは増分データとは見なされません。
ドロップおよび復元操作を実行すると、システムはコミット時間とバージョンを生成します。パーティションテーブルを復元すると、テーブル内のすべてのパーティションが個別に復元されます。システムは各パーティションのバージョンを生成します。
マテリアライズドビュー、オブジェクトテーブル、および外部テーブルの自動バックアップと回復はサポートされていません。
コマンド
次の表に、バックアップと復元機能を使用する際に関連するコマンドを示します。
シナリオ | コマンド | 機能 | 権限 |
バックアップデータの保持期間を設定する |
| このコマンドは、バックアップデータの保持期間を設定するために使用されます。保持期間中、使用中のバージョンのデータを任意のバージョンのバックアップデータに復元できます。
バックアップサイクルが調整された後、有効なポリシーは次のとおりです。
| Alibaba Cloud アカウントまたはプロジェクト管理者のみがこの操作を実行できます。 |
| このコマンドは MaxCompute クライアントで実行され、プロジェクトレベルのパラメーターに関する情報を取得します。MaxCompute クライアントの使用方法の詳細については、「MaxCompute クライアント (odpscmd)」をご参照ください。odps.timemachine.retention.days パラメーターの値を確認できます。 | ||
バックアップデータの表示 |
| 現在のプロジェクト内のテーブルとバックアップ状態のテーブル (削除されたテーブルを含む) に関する情報を表示します。テーブル名でテーブルをフィルターできます。このコマンドは | プロジェクトに対する List 権限が必要です。 詳細については、「MaxCompute 権限」をご参照ください。 |
| 指定したテーブルのバックアップデータを表示します。LIMIT を使用してレコード長を指定し、OFFSET またはバージョン (LSN) を使用して開始位置を指定できます。 パラメーターの詳細については、「パラメーターの説明」をご参照ください。 |
詳細については、「MaxCompute 権限」をご参照ください。 | |
| このコマンドは、ドロップされたテーブルのバックアップデータを表示し、保持期間内のデータバージョンに関する情報を取得するために使用されます。
| プロジェクトに対する List 権限が必要です。 詳細については、「MaxCompute 権限」をご参照ください。 | |
| このコマンドは、指定されたパーティションのバックアップデータを表示し、保持期間内のデータバージョンに関する情報を取得するために使用されます。 | なし。 | |
| このコマンドは、ドロップされたパーティションのバックアップデータを表示し、保持期間内のデータバージョンに関する情報を取得するために使用されます。id の値は、 | ||
データの復元 |
| 削除されたテーブルを回復します。
|
|
| テーブルを指定されたバージョンに復元します。
| ||
| テーブルを指定されたバージョンに回復し、新しいテーブルとして名前を変更するか、別の名前のテーブルにデータを更新します。 | ||
| このコマンドは、ドロップされたパーティションを復元するために使用されます。一度に複数のドロップされたパーティションを復元できます。通常、このコマンドは、 | ||
| このコマンドは、指定されたパーティションを指定されたバージョンに復元するために使用されます。一度に複数のパーティションを復元できます。通常、このコマンドは、 | ||
| 指定されたパーティションを指定されたバージョンに回復し、新しいテーブルとして名前を変更します。 |
データファイルクリーンアップ操作
標準テーブルと比較して、Delta テーブルはタイムトラベル期間内の既存データを保持するため、追加のストレージコストが発生します。他のシナリオでは、システムは不要な既存データファイルを適切なタイミング (最大 1 日以内) で自動的に削除します。ユーザーは追加の操作を行う必要がなく、対応するストレージコストも節約できます。削除できる既存データには以下が含まれます。
タイムトラベル期間より前の既存データ。テーブルがタイムトラベルクエリをサポートしないように設定されている場合、すべての既存データは自動的に削除できます。
ライフサイクルを超えた、またはドロップされた既存データで、バックアップ保護時間も超えているもの。
既存データが自動的に削除されるには、上記のすべての条件を満たす必要があります。
既存データとは、具体的にはゴミ箱ディレクトリに移動されたデータファイルを指します。一般的に、ライフサイクルを超えたり、drop 操作を実行したりする他に、compaction や insert overwrite を実行すると、現在のデータ書き込みディレクトリにある既存のデータファイルがゴミ箱ディレクトリに移動され、システムによる自動削除を待つことになります。
ファイルの強制クリーンアップ構文
-- ゴミ箱内の既存データファイルを手動で強制削除します。 PURGE TABLE <table_name>;使用上の注意と制限
このコマンドを実行すると、システムはゴミ箱内のすべての既存データを直ちに削除するため、timetravel 操作で既存データをクエリできなくなる可能性があります。
このコマンドは通常、ファイルが多すぎてディスクの読み書きが不安定になったり、既存データが多すぎてコストが急増したりするなど、緊急時の特別なシナリオでのみ実行されます。通常の状況では、ゴミ箱内の既存データはシステムによる自動削除を待つことができます。
例
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); SELECT * FROM mf_ttt version AS OF 2; -- 次の結果が返されます: +------------+------------+ | pk | val | +------------+------------+ | 1 | 1 | | 2 | 2 | +------------+------------+ -- compaction を実行し、purge を実行してから、タイムトラベルクエリを実行します。 ALTER TABLE mf_ttt compact major; SELECT * FROM mf_ttt version AS OF 2; -- 次の結果が返されます: +------------+------------+ | pk | val | +------------+------------+ | 1 | 1 | | 2 | 2 | +------------+------------+ PURGE TABLE mf_ttt; SELECT * FROM mf_ttt version AS OF 2; --次の結果が返されます: +------------+------------+ | pk | val | +------------+------------+ | 1 | 1 | | 3 | 3 | | 2 | 20 | +------------+------------+
バックアップデータ表示の例
このセクションでは、test_restore プロジェクト内のテーブルのバックアップデータを表示する方法について説明します。
すべてのテーブルのバックアップデータを表示します。
SHOW HISTORY FOR tables;コマンドを実行します。ステートメント例:-- test_restore_x テーブルを作成します。 CREATE TABLE test_restore_1(colname STRING); CREATE TABLE test_restore_2(colname INT); -- すべてのテーブルのバックアップデータを表示します。 SHOW HISTORY FOR tables;次の結果が返されます:
ID = 20250718083243873gj6aesnzawr3 Name Id Type IsPartitioned CreateTime DropTime test_restore_1 a0b06367bd054d17a55505aa31601b89 MANAGED_TABLE FALSE 2025-07-18 16:32:13 test_restore_2 437b29466ba948b392b2090ec0a60fc2 MANAGED_TABLE FALSE 2025-07-18 16:32:14 OK指定したテーブルのバックアップデータを表示します。
SHOW HISTORY FOR tables [LIKE <table_name>];コマンドを実行します。ステートメント例:-- テーブル test_restore1 のバックアップデータを表示します。 SHOW HISTORY FOR tables LIKE test_restore_1;次の結果が返されます。
ID = 20250718083704294gcw24sgigrl Name Id Type IsPartitioned CreateTime DropTime test_restore_1 a0b06367bd054d17a55505aa31601b89 MANAGED_TABLE FALSE 2025-07-18 16:32:13 OKドロップされたテーブルのバックアップデータを表示します。
SHOW HISTORY FOR table <table_name>;コマンドを実行します。ステートメント例:-- test_restore_1 テーブルのデータを更新します。 INSERT OVERWRITE TABLE test_restore_1 values("0"); INSERT OVERWRITE TABLE test_restore_1 values("1"); INSERT OVERWRITE TABLE test_restore_1 values("2"); INSERT OVERWRITE TABLE test_restore_1 values("3"); -- test_restore_1 テーブルのバックアップデータを表示します。 SHOW HISTORY FOR TABLE test_restore_1;次の結果が返されます。
ID = 2025071808522592gbougy83ad1 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 OKパーティションテーブルまたはパーティションのバックアップデータを表示します。
SHOW HISTORY FOR table <table_name> [LIMIT <limit_value>] (LSN <lsn_value> | OFFSET <offset_value>);コマンドを実行します。ステートメント例:SHOW HISTORY FOR TABLE test_restore_1 LIMIT 1 LSN '00000000000000000002';結果は次のとおりです。
ID = 20250718090511323gzfl5f9glr2 ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE a0b06367bd054d17a55505aa31601b89 test_restore_1 0000000000000002 2025-07-18 16:52:08 OVERWRITE OKドロップされたテーブルのバックアップデータを表示します。
SHOW HISTORY FOR TABLE table_name ('id'='xxxx');コマンドを実行します。例:-- test_restore_2 テーブルのデータを更新します。 INSERT OVERWRITE TABLE test_restore_2 values(0); INSERT OVERWRITE TABLE test_restore_2 values(1); INSERT OVERWRITE TABLE test_restore_2 values(2); INSERT OVERWRITE TABLE test_restore_2 values(3); -- test_restore_2 テーブルを削除します。 DROP TABLE test_restore_2; -- test_restore_2 テーブルの削除を確認します。 Confirm to "drop table test_restore_2;" (yes/no)? yes -- ドロップされたテーブル test_restore_2 のバックアップデータを表示します。 SHOW HISTORY FOR TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');次の結果が返されます。
ID = 20250718091226165g1vtbsnyu4h ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE 437b29466ba948b392b2090ec0a60fc2 test_restore_2 0000000000000001 2025-07-18 16:32:14 CREATE TABLE 437b29466ba948b392b2090ec0a60fc2 test_restore_2 0000000000000002 2025-07-18 17:12:20 DROP OKパーティションテーブルのバックアップデータを表示します。
SHOW HISTORY FOR TABLE table_name ('id'='xxxx');コマンドを実行して、パーティションテーブルのバックアップデータを表示します。例:-- test_restore_part_1 という名前のテーブルを作成します。 CREATE TABLE test_restore_part_1(colname string) PARTITIONED BY(ds string); -- test_restore_part_1 テーブルを更新します。 INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250701") values ("1"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250702") values ("2"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250703") values ("3"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250704") values ("4"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250705") values ("5"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250706") values ("6"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250101") values ("20250101"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250102") values ("20250102"); -- test_restore_part_1 テーブルのバックアップデータを表示します。 SHOW HISTORY FOR TABLE test_restore_part_1('id'='fbee66b56cf544d2a9999d5d0ce5d352');次の結果が返されます。
ID = 20250718092558737ge7pyaa803e ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE fbee66b56cf544d2a9999d5d0ce5d352 test_restore_part_1 0000000000000001 2025-07-18 17:23:11 CREATE PARTITION 271aebf3e17a4a8e9f6b35733bf63db4 ds=20250701 0000000000000002 2025-07-18 17:25:23 CREATE PARTITION df9e7f502d464763a243fefe1da4f911 ds=20250702 0000000000000003 2025-07-18 17:25:27 CREATE PARTITION 24cf9953e8c5445bb2f1ead87ea09bae ds=20250703 0000000000000004 2025-07-18 17:25:28 CREATE PARTITION 1c4a9a608d3d4d22bc194ab402da4b8f ds=20250704 0000000000000005 2025-07-18 17:25:32 CREATE PARTITION be0d4c9ff5034c4f932d1a2245c2e65a ds=20250705 0000000000000006 2025-07-18 17:25:35 CREATE PARTITION 45957304be5f4d09a5a3ba66808604be ds=20250706 0000000000000007 2025-07-18 17:25:37 CREATE PARTITION c36933ddefb6415bacabd5f453ee3ce7 ds=20250101 0000000000000008 2025-07-18 17:25:42 CREATE PARTITION 0b01e0d234fc4bf6a3529752e3045037 ds=20250102 0000000000000009 2025-07-18 17:25:44 CREATE OKパーティションのバックアップデータを表示します。
SHOW HISTORY FOR TABLE table_name partition_spec;またはSHOW HISTORY FOR TABLE table_name PARTITION('id'='xxxx');コマンドを実行して、パーティションのバックアップデータを表示します。次の例に詳細を示します。
-- test_restore_part_1 テーブル内の指定されたパーティションのバックアップデータを表示します。
SHOW HISTORY FOR TABLE test_restore_part_1('id'='fbee66b56cf544d2a9999d5d0ce5d352')
PARTITION(ds='20250701') PARTITION(ds='20250702');次の結果が返されます。
ID = 2025071809280096g7ou2qft0o2
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
PARTITION 271aebf3e17a4a8e9f6b35733bf63db4 ds=20250701 0000000000000002 2025-07-18 17:25:23 CREATE
PARTITION df9e7f502d464763a243fefe1da4f911 ds=20250702 0000000000000003 2025-07-18 17:25:27 CREATE
OK非パーティションテーブルの復元
このセクションでは、test_restore プロジェクト内の非パーティションテーブルを復元する方法について説明します。
ドロップされたテーブルを復元します。
RESTORE TABLE table_name ('id'='xxxxx');コマンドを実行します。復元したいテーブルの名前が一意であることを確認してください。同じ名前の別のテーブルがある場合は、まずその名前を変更してください。ステートメント例:-- ドロップされたテーブル test_restore_2 のバックアップデータをクエリします。 SHOW HISTORY FOR TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2'); -- test_restore_2 という名前のテーブルを作成します。 CREATE TABLE test_restore_2(colname string); -- ドロップされたテーブル test_restore_2 を復元します。ただし、同じ名前の既存のテーブルがあるため、エラーが返されます。 RESTORE TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2'); -- 既存のテーブル test_restore_2 の名前を変更します。 ALTER TABLE test_restore_2 rename TO test_restore_2_rename; -- ドロップされたテーブル test_restore_2 を復元します。 RESTORE TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');OK が返されます。
テーブルを指定されたバージョンに復元します。削除されたテーブルの場合、この操作を実行する前にまずテーブルを復元する必要があります。
RESTORE TABLE table_name TO LSN 'xxxx';コマンドを実行します。ステートメント例:-- test_restore_1 テーブルを指定された LSN に復元します。 RESTORE TABLE test_restore_1 TO LSN '0000000000000004'; -- test_restore_1 テーブルのデータをクエリします。 SELECT * FROM test_restore_1;次の結果が返されます。
+------------+ | colname | +------------+ | 2 | +------------+テーブルを指定されたバージョンに復元し、テーブルの名前を変更するか、別の名前のテーブルにデータを更新します。
RESTORE TABLE table_name TO LSN 'xxxx' AS new_table_name;コマンドを実行します。これには、次の 3 つのシナリオが含まれます。
テーブルを指定されたバージョンに復元し、テーブルの名前を変更します。
-- ドロップされたテーブル test_restore_2 を指定された LSN に復元し、テーブルの名前を test_restore_new に変更します。 RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new; -- test_restore_new テーブルのデータをクエリします。 SELECT * FROM test_restore_new;次の結果が返されます。
+------------+ | colname | +------------+ | 1 | +------------+テーブルを指定されたバージョンに復元し、別の名前の既存のテーブルにデータを更新します。
-- test_restore_2 テーブルを指定されたバージョンに復元し、既存のテーブル test_restore_new にデータを保存します。 RESTORE TABLE test_restore_2 TO LSN '0000000000000005' AS test_restore_new; -- test_restore_new テーブルのバックアップデータをクエリします。 SHOW HISTORY FOR TABLE test_restore_new;次の結果が返されます。
ID = 20250722082102262gsizjcbzawr3 ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE 565b5e29eecf4fbd88965b24822ded6a test_restore_new 0000000000000001 2025-07-22 16:17:1CREATE TABLE 565b5e29eecf4fbd88965b24822ded6a test_restore_new 0000000000000002 2025-07-22 16:20:5OVERWRITE OKテーブルを指定されたバージョンに復元し、別の名前とスキーマを持つテーブルにデータを更新します。2 つのテーブルは同じスキーマを持つ必要があるため、この操作は失敗します。例:
-- 異なるスキーマを持つテーブルを作成します。 CREATE TABLE test_restore_2cols(col1 string, col2 string); -- test_restore_1 テーブルを指定されたバージョンに復元し、データを test_restore_2cols テーブルに書き込みます。 RESTORE TABLE test_restore_1 TO LSN '0000000000000005' AS test_restore_2cols;次の結果が返されます。
FAILED: Catalog Service Failed, ErrorCode: 105, Error Message: ODPS-0110061: Failed to run ddltask - Restore table failed because: field schema not same, [{"comment":"","id":"","name":"colname","type":"string"}] vs [{"comment":"","id":"","name":"col1","type":"string"}, {"comment":"","id":"","name":"col2","type":"string"}]
パーティションテーブルとパーティションの復元
このセクションでは、test_restore プロジェクト内のパーティションテーブルまたはパーティションを復元する方法について説明します。
パーティションテーブルを復元します。
RESTORE TABLE table_name ('id'='xxxxx');コマンドを実行します。ステートメント例:-- test_restore_part_x という名前のテーブルを作成します。 CREATE TABLE test_restore_part_x(a string) PARTITIONED BY(ds string); -- test_restore_part_x テーブルを更新します。 INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191201") values ("1"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191202") values ("2"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191203") values ("3"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191204") values ("4"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191205") values ("5"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191205") values ("6"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20200101") values ("20200101"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20200102") values ("20200102"); -- test_restore_part_x テーブルのパーティションを表示します。 LIST PARTITIONS test_restore_part_x; -- test_restore_part_x テーブルのデータを表示します。 SELECT * FROM test_restore_part_x; -- test_restore_part_x テーブルをドロップします。 DROP TABLE test_restore_part_x; -- ドロップテーブル操作を確認します。 Confirm to "drop table test_restore_part_x;" (yes/no)? yes -- test_restore_part_x テーブルを復元します。 RESTORE TABLE test_restore_part_x('id'='94d436523fe14ba39f33d2dee738c018'); -- test_restore_part_x テーブルのバックアップデータを表示します。 SHOW HISTORY FOR TABLE test_restore_part_x('id'='94d436523fe14ba39f33d2dee738c018'); -- test_restore_part_x テーブルのパーティションを表示します。 LIST PARTITIONS test_restore_part_x;次の結果が返されます。
ds=20191201 ds=20191202 ds=20191203 ds=20191204 ds=20191205 ds=20200101 ds=20200102パーティションを復元します。削除されたテーブルの場合、この操作を実行する前にまずテーブルを復元する必要があります。
RESTORE TABLE table_name PARTITION('id'='xxxx')[PARTITION('id'='xxxx')];コマンドを実行します。ステートメント例:-- test_restore_part_y という名前のテーブルを作成します。 CREATE TABLE test_restore_part_y(a string) PARTITIONED BY(ds string); -- test_restore_part_y テーブルを更新します。 INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250701") values ("1"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250702") values ("2"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250703") values ("3"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250704") values ("4"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250705") values ("5"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250706") values ("6"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250101") values ("20250101"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250102") values ("20250102"); -- test_restore_part_y テーブルのパーティションを表示します。 LIST PARTITIONS test_restore_part_y; -- test_restore_part_y テーブルからパーティションをドロップします。 ALTER TABLE test_restore_part_y DROP PARTITION(ds='20250701'),PARTITION(ds='20250702'); -- パーティションドロップ操作を確認します。 Confirm to "alter table test_restore_part_y drop partition(ds='20250701'),partition(ds='20250702');" (yes/no)? yes -- test_restore_part_y テーブルのパーティションを表示します。 LIST PARTITIONS test_restore_part_y; -- test_restore_part_y テーブルのパーティション ID を表示します。 SHOW HISTORY FOR TABLE test_restore_part_y; -- test_restore_part_y テーブルのパーティションを復元します。 RESTORE TABLE test_restore_part_y PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa') PARTITION('id'='8c85184ec0b44fba8198274401df2519'); -- test_restore_part_y テーブルのパーティションを表示します。 LIST PARTITIONS test_restore_part_y;次の結果が返されます。
ds=20250101 ds=20250102 ds=20250701 ds=20250702 ds=20250703 ds=20250704 ds=20250705 ds=20250706パーティションを指定されたバージョンに復元します。削除されたテーブルの場合、この操作を実行する前にまずテーブルを復元する必要があります。
RESTORE TABLE table_name partition_spec1[partition_spec2] to LSN 'xxxx';コマンドを実行します。ステートメント例:-- test_restore_part_y テーブルのデータを更新します。 INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250701") VALUES ("20250701_v1"); INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250702") VALUES ("20250702_v1"); INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250701") VALUES ("20250701_v2"); INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250702") VALUES ("20250702_v2"); -- test_restore_part_y テーブル内の指定されたパーティションのデータを表示します。 SELECT * FROM test_restore_part_y WHERE ds='20250701' or ds='20250702'; -- test_restore_part_y テーブル内の指定されたパーティションを指定された LSN に復元します。 RESTORE TABLE test_restore_part_y PARTITION(ds='20250701') PARTITION(ds='20250702') to LSN '0000000000000010'; -- test_restore_part_y テーブル内の指定されたパーティションのデータを表示します。 SELECT * FROM test_restore_part_y WHERE ds='20250701' or ds='20250702';次の結果が返されます。
-- 最初のクエリは次の結果を返します。 +------------+------------+ | a | ds | +------------+------------+ | 20250701_v2 | 20250701 | | 20250702_v2 | 20250702 | +------------+------------+ -- 2 番目のクエリは次の結果を返します。 +------------+------------+ | a | ds | +------------+------------+ | 2 | 20250702 | | 1 | 20250701 | +------------+------------+パーティションを指定されたバージョンに復元し、テーブルの名前を変更します。削除されたテーブルの場合、この操作を実行する前にまずテーブルを復元する必要があります。
RESTORE TABLE table_name partition_spec1[partition_spec2] to LSN 'xxxx' as new_table_name;コマンドを実行します。ステートメント例:-- パーティションを指定された LSN に復元し、新しいテーブルに test_restore_part_y_v10 という名前を付けます。 RESTORE TABLE test_restore_part_y PARTITION(ds='20250701') PARTITION(ds='20250702') TO LSN '0000000000000010' AS test_restore_part_y_v10; -- test_restore_part_y_v10 テーブルのデータを表示します。 SELECT * FROM test_restore_part_y_v10 WHERE ds='20250701' or ds='20250702';次の結果が返されます。
+------------+------------+ | a | ds | +------------+------------+ | 1 | 20250701 | | 2 | 20250702 | +------------+------------+
Delta Table の例
-- テーブルを作成します。
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 |
+------------+------------+------------+------------+
-- テーブルを復元します。「table_id」は DESC EXTENDED table コマンドを実行して取得できます。
DESC EXTENDED mf_dt;
-- 次の結果が返されます。
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$*****cloud_com |
| Project: mc_oss_external_tables |
| TableComment: |
+------------------------------------------------------------------------------------+
| CreateTime: 2025-07-21 15:31:42 |
| LastDDLTime: 2025-07-21 15:31:42 |
| LastModifiedTime: 2025-07-21 17:14:58 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 8976 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment |
+------------------------------------------------------------------------------------+
| pk | bigint | | | false | NULL | |
| val | bigint | | | false | NULL | |
+------------------------------------------------------------------------------------+
| Partition Columns: |
+------------------------------------------------------------------------------------+
| dd | string | |
| hh | string | |
+------------------------------------------------------------------------------------+
| Extended Info: |
+------------------------------------------------------------------------------------+
| TableID: cd607cd938dc4ca6886dd12212995604 |
| IsArchived: false |
| PhysicalSize: 26928 |
| FileNum: 10 |
| StoredAs: AliOrc |
| CompressionStrategy: normal |
| Transactional: true |
| IsolationMin: NONSTRICT_SNAPSHOT_ISOLATION |
| odps.timemachine.retention.days: 1 |
| encryption_enable: false |
| Primarykey: [pk] |
| acid.data.retain.hours: 24 |
| write.bucket.num: 16 |
+------------------------------------------------------------------------------------+
DROP TABLE mf_dt;
Confirm to "DROP TABLE mf_dt" (yes/no)? yes
RESTORE TABLE mf_dt ('id' = 'cd607cd938dc4ca6886dd12212995604');
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 |
+------------+------------+------------+------------+
-- パーティションを復元します。「partition_id」は SHOW HISTORY FOR TABLE コマンドを実行して取得できます。
SHOW HISTORY FOR TABLE mf_dt;
-- 次の結果が返されます。
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
TABLE cd607cd938dc4ca6886dd12212995604 mf_dt 0000000000000001 2025-07-21 15:31:4CREATE
PARTITION 51d38cc9ded344cf99188cd1a806e5d2 dd=01/hh=01 0000000000000002 2025-07-21 17:14:4CREATE
PARTITION 51d38cc9ded344cf99188cd1a806e5d2 dd=01/hh=01 0000000000000003 2025-07-21 17:14:5APPEND
TABLE cd607cd938dc4ca6886dd12212995604 mf_dt 0000000000000004 2025-07-21 17:18:4DROP
TABLE cd607cd938dc4ca6886dd12212995604 mf_dt 0000000000000005 2025-07-21 17:18:5RESTORE
PARTITION 51d38cc9ded344cf99188cd1a806e5d2 dd=01/hh=01 0000000000000006 2025-07-21 17:18:5RESTORE
ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01');
Confirm to "ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01')" (yes/no)? yes
RESTORE TABLE mf_dt PARTITION('id' = '51d38cc9ded344cf99188cd1a806e5d2');
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 |
+------------+------------+------------+------------+
-- 復元されたテーブルに対してタイムトラベルクエリを実行します。
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';
-- 次の結果が返されます。
+------------+------------+------------+------------+
| pk | val | dd | hh |
+------------+------------+------------+------------+
| 1 | 1 | 01 | 01 |
| 4 | 4 | 01 | 01 |
| 5 | 5 | 01 | 01 |
| 2 | 2 | 01 | 01 |
| 3 | 30 | 01 | 01 |
+------------+------------+------------+------------+