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

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

最終更新日:Nov 09, 2025

このトピックでは、MaxCompute のバックアップと復元機能について説明し、関連するコマンドと例を示します。

概要

MaxCompute はバックアップと復元機能を提供します。この機能により、MaxCompute は元のデータを特定の期間、自動的にバックアップして保持できます。元のデータとは、削除や変更などの操作が実行されていないデータを指します。データ損失を防ぐために、保持期間内のデータを復元できます。备份与恢复

バックアップと復元機能には、次の利点があります。

  • 自動有効化

    この機能は外部ストレージから独立しています。デフォルトでは、すべての MaxCompute プロジェクトのデータの保持期間は 24 時間です。データのバックアップとストレージは無料です。

  • 自動および継続的バックアップ

    MaxCompute は変更されたデータを自動的にバックアップします。データを複数回変更した場合、MaxCompute は変更のたびにデータをバックアップします。この機能は、定期的なデータバックアップポリシーと比較して、データ損失をより効率的に防ぐのに役立ちます。

  • 迅速で使いやすいデータ復元

    MaxCompute は、複数のバージョンのデータとメタデータを管理するための高度な機能を提供します。バックアップと復元操作は、追加の計算リソースを消費しません。関連するコマンドを実行して、さまざまなボリュームのデータを復元できます。

注意事項

バックアップと復元機能を使用する際は、次の点に注意してください。

  • MaxCompute クライアントを使用してテーブルのバックアップ情報を表示する場合は、クライアントの最新バージョンをダウンロードすることをお勧めします。以前のバージョンでは、バックアップと回復のパラメーターやテーブルのバックアップ情報を表示できない場合があります。

  • テーブルを変更するたびにバックアップテーブルが生成されます。テーブルを変更しない場合、バックアップテーブルは生成されません。

  • バックアップテーブルが保存される日数がプロジェクトに設定されたバックアップデータ保持期間を超えると、MaxCompute はバックアップテーブルを削除します。削除されたバックアップテーブルは復元またはクエリできません。

  • テーブルに対して purge コマンドを実行した後、テーブル内のデータは復元できません。

  • ドロップされた Delta テーブルを含む、ドロップされたパーティションまたはテーブルは、指定されたログシーケンス番号 (LSN) に直接復元することはできません。まずパーティションまたはテーブルを復元してから、指定された LSN に復元する必要があります。

  • Delta Table の制限:

    • ドロップされたパーティションまたはテーブルを完全に復元できます。ドロップされたパーティションまたはテーブルを特定のマイナーバージョンに復元することはできません。マイナーバージョンのデータをクエリしたい場合は、タイムトラベル機能を使用できます。

    • ドロップされたテーブルまたはパーティションが復元された後、タイムトラベルと増分クエリの動作は、ドロップ前とほぼ同じです。ただし、次の詳細に注意してください。

      • テーブルが復元される前にドロップされたテーブルに対してタイムトラベルクエリなどのクエリを実行すると、エラーが報告されます。パーティションが復元される前にドロップされたパーティションに対してクエリを実行すると、通常のクエリと同様にクエリ結果は返されません。

      • 復元されたドロップ済みテーブルに対するタイムトラベルクエリまたは増分クエリに指定されたクエリ時間が、復元時間より前で、ドロップ時間以降である場合、システムはクエリされたデータを削除済みとみなし、クエリ結果は返されません。

      • 復元されたドロップ済みテーブルに対するタイムトラベルクエリまたは増分クエリに指定されたクエリ時間がドロップ時間より前の場合、クエリ結果はドロップ操作が実行されなかった場合と同じになります。

      • 復元されたドロップ済みテーブルに対するタイムトラベルクエリまたは増分クエリに指定されたクエリ時間が復元時間以降の場合、クエリ結果はドロップおよび復元操作が実行されなかった場合と同じになります。復元されたデータは増分データとは見なされません。

    • ドロップおよび復元操作を実行すると、システムはコミット時間とバージョンを生成します。パーティションテーブルを復元すると、テーブル内のすべてのパーティションが個別に復元されます。システムは各パーティションのバージョンを生成します。

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

コマンド

次の表に、バックアップと復元機能を使用する際に関連するコマンドを示します。

シナリオ

コマンド

機能

権限

バックアップデータの保持期間を設定する

setproject odps.timemachine.retention.days=days;

このコマンドは、バックアップデータの保持期間を設定するために使用されます。保持期間中、使用中のバージョンのデータを任意のバージョンのバックアップデータに復元できます。

days の値の範囲は 0 から 30 です。デフォルト値は 1 です。値 0 は、バックアップ機能が無効になっていることを示します。

バックアップサイクルが調整された後、有効なポリシーは次のとおりです。

  • バックアップサイクルの延長: 新しいバックアップサイクルは同日に有効になります。

  • 保持期間を短縮した場合、MaxCompute は新しい保持期間を超えるバックアップデータを自動的に削除します。

Alibaba Cloud アカウントまたはプロジェクト管理者のみがこの操作を実行できます。

setproject;

このコマンドは MaxCompute クライアントで実行され、プロジェクトレベルのパラメーターに関する情報を取得します。MaxCompute クライアントの使用方法の詳細については、「MaxCompute クライアント (odpscmd)」をご参照ください。odps.timemachine.retention.days パラメーターの値を確認できます。odps.timemachine.retention.days=1 の場合、プロジェクトのバックアップデータの保持期間は 1 日 (24 時間) です。

バックアップデータの表示

show history for tables [like <table_name>];

現在のプロジェクト内のテーブルとバックアップ状態のテーブル (削除されたテーブルを含む) に関する情報を表示します。テーブル名でテーブルをフィルターできます。このコマンドは show tables; コマンドとは異なります。

プロジェクトに対する List 権限が必要です。

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

show history for table <table_name>[LIMIT <limit_value>] (LSN <lsn_value> | OFFSET <offset_value>;

指定したテーブルのバックアップデータを表示します。LIMIT を使用してレコード長を指定し、OFFSET またはバージョン (LSN) を使用して開始位置を指定できます。

パラメーターの詳細については、「パラメーターの説明」をご参照ください。

  • テーブルが存在する場合、テーブルに対する ShowHistory 権限が必要です。

  • テーブルがドロップされた場合、このコマンドを実行するとエラーが返されます。show history for tables [like <table_name>]; コマンドを実行して、ドロップされたテーブルの情報とバックアップデータバージョンの情報を取得できます。

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

show history for table table_name ('id'='xxxx');

このコマンドは、ドロップされたテーブルのバックアップデータを表示し、保持期間内のデータバージョンに関する情報を取得するために使用されます。

show history for tables [like <table_name>]; コマンドを実行して、ドロップされたテーブルの名前と ID を取得できます。

プロジェクトに対する List 権限が必要です。

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

show history for table table_name partition_spec;

このコマンドは、指定されたパーティションのバックアップデータを表示し、保持期間内のデータバージョンに関する情報を取得するために使用されます。

なし。

show history for table table_name PARTITION('id'='xxxx');

このコマンドは、ドロップされたパーティションのバックアップデータを表示し、保持期間内のデータバージョンに関する情報を取得するために使用されます。id の値は、show history for table <table_name>; のコマンド出力の ObjectId フィールドから取得できます。

データの復元

restore table table_name ('id'='xxxxx');

削除されたテーブルを回復します。

show history for tables [like <table_name>]; コマンドを使用して、削除されたテーブルを検索し、テーブル名とテーブル ID 情報を取得できます。

  • テーブルを復元する際は、次の点に注意してください。

    • テーブルが存在する場合、テーブルに対する Update 権限が必要です。

    • テーブルが存在しない場合、プロジェクトに対する CreateTable 権限が必要です。

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

    説明

    クラスター化テーブルはサポートされていません。

  • パーティションを復元する場合、LSN は 1 つしか指定できません。各 LSN はデータバージョンに対応します。

    一度に複数のパーティションを復元する場合、MaxCompute は各パーティションを指定された LSN に復元します。パーティションに指定された LSN がない場合、MaxCompute はパーティションを最初の LSN に復元します。

    たとえば、pt1 パーティションの LSN は 100、102、104、106 で、pt2 パーティションの LSN は 101、103、104、105 です。パーティションを復元するには、次のコマンドを実行します。

    restore table table_name PARTITION(pt='1') PARTITION(pt='2') to LSN '102';

    このコマンドを実行すると、pt1 パーティションは LSN 102 に復元され、pt2 パーティションは LSN 101 に復元されます。

restore table table_name to LSN 'xxxx';

テーブルを指定されたバージョンに復元します。

show history for table <table_name>; コマンドを使用して、テーブルのバージョン情報を取得できます。

restore table table_name to LSN 'xxxx' as new_table_name;

テーブルを指定されたバージョンに回復し、新しいテーブルとして名前を変更するか、別の名前のテーブルにデータを更新します。

restore table table_name PARTITION('id'='xxxx')[PARTITION('id'='xxxx')];

このコマンドは、ドロップされたパーティションを復元するために使用されます。一度に複数のドロップされたパーティションを復元できます。通常、このコマンドは、drop partition 文が実行されたパーティションを復元したり、ライフサイクルが終了した後に回収されたパーティションを復元したりするために使用されます。

restore table table_name partition_spec1[partition_spec2 ]to LSN 'xxxx';

このコマンドは、指定されたパーティションを指定されたバージョンに復元するために使用されます。一度に複数のパーティションを復元できます。通常、このコマンドは、overwrite または merge 操作が実行された後に回復する必要があるパーティションを復元するために使用されます。

restore table table_name partition_spec1[partition_spec2 ]to LSN 'xxxx' as new_table_name;

指定されたパーティションを指定されたバージョンに回復し、新しいテーブルとして名前を変更します。

データファイルクリーンアップ操作

標準テーブルと比較して、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         | 
+------------+------------+------------+------------+