全部产品
Search
文档中心

MaxCompute:Backup lokal

更新时间:Nov 10, 2025

Topik ini menjelaskan fitur backup dan pemulihan MaxCompute serta menyediakan perintah dan contoh terkait.

Ikhtisar

MaxCompute menyediakan fitur backup dan pemulihan yang secara otomatis mencadangkan dan menyimpan data asli selama periode tertentu. Data asli mengacu pada data yang belum mengalami operasi apa pun, seperti penghapusan atau modifikasi. Anda dapat memulihkan data dalam periode retensi untuk mencegah kehilangan data.备份与恢复

Fitur backup dan pemulihan memberikan manfaat berikut:

  • Pengaktifan otomatis

    Fitur ini tidak bergantung pada penyimpanan eksternal. Secara default, periode retensi data di semua Proyek MaxCompute adalah 24 jam. Backup dan penyimpanan data tidak dikenai biaya.

  • Backup otomatis dan berkelanjutan

    MaxCompute secara otomatis mencadangkan data setiap kali dimodifikasi. Jika data dimodifikasi beberapa kali, MaxCompute akan mencadangkan data setelah setiap modifikasi. Fitur ini lebih efisien dalam mencegah kehilangan data dibandingkan dengan kebijakan backup periodik.

  • Pemulihan data yang cepat dan mudah digunakan

    MaxCompute menyediakan kemampuan lanjutan untuk mengelola berbagai versi data dan metadata. Operasi backup dan pemulihan tidak mengonsumsi sumber daya komputasi tambahan. Anda dapat menjalankan perintah terkait untuk memulihkan volume data yang berbeda.

Perhatian

Saat menggunakan fitur backup dan pemulihan, perhatikan poin-poin berikut:

  • Jika ingin melihat informasi backup tabel menggunakan Klien MaxCompute, disarankan untuk mengunduh versi terbaru klien tersebut. Versi sebelumnya mungkin tidak menampilkan parameter backup dan pemulihan atau informasi backup tabel.

  • Tabel cadangan dihasilkan setiap kali tabel dimodifikasi. Tidak ada tabel cadangan yang dihasilkan jika tabel tidak dimodifikasi.

  • Jika durasi penyimpanan tabel cadangan melebihi periode retensi data cadangan yang dikonfigurasi untuk proyek, MaxCompute akan menghapus tabel cadangan tersebut. Tabel cadangan yang dihapus tidak dapat dipulihkan atau diquery.

  • Setelah perintah purge dijalankan pada tabel, data dalam tabel tersebut tidak dapat dipulihkan.

  • Partisi atau tabel yang di-drop, termasuk tabel Delta yang di-drop, tidak dapat langsung dipulihkan ke nomor urutan log (LSN) tertentu. Anda harus terlebih dahulu memulihkan partisi atau tabel tersebut, lalu memulihkannya ke LSN tertentu.

  • Batasan Tabel Delta:

    • Anda dapat memulihkan sepenuhnya partisi atau tabel yang di-drop. Namun, Anda tidak dapat memulihkan partisi atau tabel tersebut ke versi minor tertentu. Untuk mengquery data versi minor, gunakan fitur perjalanan waktu.

    • Setelah tabel atau partisi yang di-drop dipulihkan, perilaku Perjalanan Waktu dan query inkremental hampir sama seperti sebelum operasi drop. Namun, perhatikan detail berikut:

      • Jika melakukan query, seperti query perjalanan waktu, pada tabel yang di-drop sebelum tabel tersebut dipulihkan, sistem akan melaporkan error. Jika melakukan query pada partisi yang di-drop sebelum partisi tersebut dipulihkan, tidak ada hasil query yang dikembalikan, sama seperti query biasa.

      • Jika waktu query yang ditentukan untuk query perjalanan waktu atau query inkremental pada tabel yang di-drop dan telah dipulihkan lebih awal dari waktu pemulihan tetapi lebih akhir dari atau sama dengan waktu drop, sistem menganggap data yang diquery sebagai data yang dihapus, sehingga tidak ada hasil query yang dikembalikan.

      • Jika waktu query yang ditentukan untuk query perjalanan waktu atau query inkremental pada tabel yang di-drop dan telah dipulihkan lebih awal dari waktu drop, hasil query sama seperti jika operasi drop tidak pernah dilakukan.

      • Jika waktu query yang ditentukan untuk query perjalanan waktu atau query inkremental pada tabel yang di-drop dan telah dipulihkan lebih akhir dari atau sama dengan waktu pemulihan, hasil query sama seperti jika operasi drop dan pemulihan tidak pernah dilakukan. Data yang dipulihkan tidak dianggap sebagai Data inkremental.

    • Setelah melakukan operasi drop dan pemulihan, sistem menghasilkan waktu commit dan versi. Jika memulihkan tabel partisi, semua partisi dalam tabel tersebut dipulihkan secara terpisah. Sistem menghasilkan satu versi untuk setiap partisi.

  • Backup dan pemulihan otomatis untuk Tampilan yang di-materialisasi, tabel objek, dan tabel eksternal tidak didukung.

Perintah

Tabel berikut menjelaskan perintah yang digunakan dalam fitur backup dan pemulihan.

Skenario

Perintah

Fitur

Izin

Konfigurasikan periode retensi untuk data cadangan

setproject odps.timemachine.retention.days=days;

Perintah ini digunakan untuk mengonfigurasi periode retensi data cadangan. Selama periode retensi, Anda dapat memulihkan data versi yang sedang digunakan ke data cadangan versi apa pun.

Nilai days berkisar antara 0 hingga 30. Nilai default adalah 1. Nilai 0 menunjukkan bahwa fitur backup dinonaktifkan.

Setelah siklus backup disesuaikan, kebijakan yang berlaku adalah sebagai berikut:

  • Memperpanjang siklus backup: Siklus backup baru berlaku pada hari yang sama.

  • Jika memperpendek periode retensi, MaxCompute secara otomatis menghapus data cadangan yang melebihi periode retensi baru.

Hanya Akun Alibaba Cloud atau administrator proyek yang dapat melakukan operasi ini.

setproject;

Perintah ini dijalankan pada Klien MaxCompute untuk mendapatkan informasi tentang parameter tingkat proyek. Untuk informasi lebih lanjut tentang cara menggunakan Klien MaxCompute, lihat Klien MaxCompute (odpscmd). Anda dapat melihat nilai parameter odps.timemachine.retention.days. Jika odps.timemachine.retention.days=1, periode retensi data cadangan untuk proyek tersebut adalah satu hari (24 jam).

Lihat data cadangan

show history for tables [like <table_name>];

Lihat informasi tentang tabel di proyek saat ini dan tabel dalam status cadangan, termasuk tabel yang dihapus. Anda dapat memfilter tabel berdasarkan nama tabel. Perintah ini berbeda dari perintah show tables;.

Anda harus memiliki izin List pada proyek.

Untuk informasi lebih lanjut, lihat Izin MaxCompute.

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

Lihat data cadangan tabel tertentu. Anda dapat menggunakan LIMIT untuk menentukan panjang catatan, serta OFFSET atau versi (LSN) untuk menentukan posisi awal.

Untuk informasi lebih lanjut tentang parameter, lihat Deskripsi parameter.

  • Jika tabel ada, Anda harus memiliki izin ShowHistory pada tabel tersebut.

  • Jika tabel di-drop, error akan dikembalikan setelah menjalankan perintah ini. Anda dapat menjalankan perintah show history for tables [like <table_name>]; untuk mendapatkan informasi tabel yang di-drop dan informasi versi data cadangan.

Untuk informasi lebih lanjut, lihat Izin MaxCompute.

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

Perintah ini digunakan untuk melihat data cadangan tabel yang di-drop dan mendapatkan informasi tentang versi data dalam periode retensi.

Anda dapat menjalankan perintah show history for tables [like <table_name>]; untuk mendapatkan nama dan ID tabel yang di-drop.

Anda harus memiliki izin List pada proyek.

Untuk informasi lebih lanjut, lihat Izin MaxCompute.

show history for table table_name partition_spec;

Perintah ini digunakan untuk melihat data cadangan partisi tertentu dan mendapatkan informasi tentang versi data dalam periode retensi.

Tidak ada.

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

Perintah ini digunakan untuk melihat data cadangan partisi yang di-drop dan mendapatkan informasi tentang versi data dalam periode retensi. Anda dapat memperoleh nilai id dari bidang ObjectId dalam output perintah show history for table <table_name>;.

Pulihkan data

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

Memulihkan tabel yang dihapus.

Anda dapat menggunakan perintah show history for tables [like <table_name>]; untuk menemukan tabel yang dihapus dan mendapatkan informasi nama tabel serta ID tabel.

  • Saat memulihkan tabel, perhatikan poin-poin berikut:

    • Jika tabel ada, Anda harus memiliki izin Update pada tabel tersebut.

    • Jika tabel tidak ada, Anda harus memiliki izin CreateTable pada proyek.

      Untuk informasi lebih lanjut, lihat Izin MaxCompute.

    Catatan

    Tabel terklaster tidak didukung.

  • Saat memulihkan partisi, Anda hanya dapat menentukan satu LSN. Setiap LSN sesuai dengan satu versi data.

    Jika memulihkan beberapa partisi sekaligus, MaxCompute akan memulihkan setiap partisi ke LSN yang ditentukan. Jika suatu partisi tidak memiliki LSN yang ditentukan, MaxCompute akan memulihkan partisi tersebut ke LSN pertama.

    Sebagai contoh, partisi pt1 memiliki LSN 100, 102, 104, dan 106, sedangkan partisi pt2 memiliki LSN 101, 103, 104, dan 105. Untuk memulihkan partisi-partisi tersebut, jalankan perintah berikut:

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

    Setelah menjalankan perintah ini, partisi pt1 dipulihkan ke LSN 102, dan partisi pt2 dipulihkan ke LSN 101.

restore table table_name to LSN 'xxxx';

Memulihkan tabel ke versi tertentu.

Anda dapat memperoleh informasi versi tabel menggunakan perintah show history for table <table_name>;.

restore table table_name to LSN 'xxxx' as new_table_name;

Memulihkan tabel ke versi tertentu, mengganti namanya menjadi tabel baru, atau memperbarui data ke tabel dengan nama berbeda.

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

Perintah ini digunakan untuk memulihkan partisi yang di-drop. Anda dapat memulihkan beberapa partisi yang di-drop sekaligus. Dalam kondisi normal, perintah ini digunakan untuk memulihkan partisi yang di-drop menggunakan pernyataan drop partition atau untuk memulihkan partisi yang direklaim setelah masa siklus hidupnya berakhir.

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

Perintah ini digunakan untuk memulihkan partisi tertentu ke versi tertentu. Anda dapat memulihkan beberapa partisi sekaligus. Dalam kondisi normal, perintah ini digunakan untuk memulihkan partisi yang perlu dipulihkan setelah operasi overwrite atau merge dijalankan.

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

Memulihkan partisi tertentu ke versi tertentu dan mengganti namanya menjadi tabel baru.

Operasi pembersihan file data

Dibandingkan dengan tabel standar, tabel Delta menyimpan data historis dalam periode perjalanan waktu, yang menimbulkan biaya penyimpanan tambahan. Dalam skenario lain, sistem secara otomatis menghapus file data historis yang tidak diperlukan pada waktu yang tepat (paling lama dalam satu hari). Pengguna tidak perlu melakukan operasi tambahan, yang juga menghemat biaya penyimpanan terkait. Data historis yang dapat dihapus meliputi:

  • Data historis yang lebih lama dari periode perjalanan waktu. Jika tabel dikonfigurasi agar tidak mendukung query perjalanan waktu, semua data historis dapat dihapus secara otomatis.

  • Data historis yang telah melebihi siklus hidup atau telah di-drop, dan juga telah melebihi waktu perlindungan backup.

Data historis harus memenuhi semua kondisi di atas agar dapat dihapus secara otomatis.

Catatan

Data historis secara khusus mengacu pada file data yang telah dipindahkan ke direktori Keranjang daur ulang. Umumnya, selain melebihi siklus hidup atau menjalankan operasi drop, melakukan compaction atau insert overwrite juga akan menyebabkan file data yang ada di direktori penulisan data saat ini dipindahkan ke direktori Keranjang daur ulang, menunggu penghapusan otomatis oleh sistem.

  • Sintaks pembersihan paksa file

    -- Hapus paksa secara manual file data historis di Keranjang daur ulang.
    PURGE TABLE <table_name>;
  • Catatan penggunaan dan batasan

    • Setelah menjalankan perintah ini, sistem akan segera menghapus semua data historis di Keranjang daur ulang, yang dapat menyebabkan operasi perjalanan waktu tidak dapat mengquery data historis.

    • Perintah ini umumnya hanya dijalankan dalam skenario khusus untuk keperluan darurat, seperti ketika terlalu banyak file menyebabkan ketidakstabilan baca/tulis disk, atau ketika terlalu banyak data historis menyebabkan lonjakan biaya. Dalam kondisi normal, data historis di Keranjang daur ulang dapat menunggu penghapusan otomatis oleh sistem.

  • Contoh

    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;
    
    -- Hasil berikut dikembalikan:
    +------------+------------+
    | pk         | val        |
    +------------+------------+
    | 1          | 1          |
    | 2          | 2          |
    +------------+------------+
    
    -- Lakukan compaction, jalankan purge, lalu eksekusi query perjalanan waktu.
    ALTER TABLE mf_ttt compact major;
    SELECT * FROM mf_ttt version AS OF 2;
    
    -- Hasil berikut dikembalikan:
    +------------+------------+
    | pk         | val        |
    +------------+------------+
    | 1          | 1          |
    | 2          | 2          |
    +------------+------------+
    
    PURGE TABLE mf_ttt;
    SELECT * FROM mf_ttt version AS OF 2;
    --Hasil berikut dikembalikan:
    +------------+------------+
    | pk         | val        |
    +------------+------------+
    | 1          | 1          |
    | 3          | 3          |
    | 2          | 20         |
    +------------+------------+

Contoh melihat data cadangan

Bagian ini menjelaskan cara melihat data cadangan tabel di proyek test_restore.

  • Lihat data cadangan semua tabel.

    Jalankan perintah SHOW HISTORY FOR tables;. Contoh pernyataan:

    -- Buat tabel test_restore_x.
    CREATE TABLE test_restore_1(colname STRING);
    CREATE TABLE test_restore_2(colname INT);
    
    -- Lihat data cadangan semua tabel.
    SHOW HISTORY FOR tables;

    Hasil berikut dikembalikan:

    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
  • Lihat data cadangan tabel tertentu.

    Jalankan perintah SHOW HISTORY FOR tables [LIKE <table_name>];. Contoh pernyataan:

    -- Lihat data cadangan tabel test_restore1.
    SHOW HISTORY FOR tables LIKE test_restore_1;

    Hasil berikut dikembalikan:

    ID = 20250718083704294gcw24sgigrl
    Name                	Id                              	Type            	IsPartitioned 	CreateTime         	DropTime           
    test_restore_1      	a0b06367bd054d17a55505aa31601b89	MANAGED_TABLE   	FALSE         	2025-07-18 16:32:13	
    
    OK
  • Lihat data cadangan tabel yang di-drop.

    Jalankan perintah SHOW HISTORY FOR table <table_name>;. Contoh pernyataan:

    -- Perbarui data tabel 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");
    
    -- Lihat data cadangan tabel test_restore_1.
    SHOW HISTORY FOR TABLE test_restore_1;

    Hasil berikut dikembalikan:

    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
  • Lihat data cadangan tabel partisi atau partisi.

    Jalankan perintah SHOW HISTORY FOR table <table_name> [LIMIT <limit_value>] (LSN <lsn_value> | OFFSET <offset_value>);. Contoh pernyataan:

    SHOW HISTORY FOR TABLE test_restore_1 LIMIT 1 LSN '00000000000000000002';

    Hasilnya sebagai berikut.

    ID = 20250718090511323gzfl5f9glr2
    ObjectType	ObjectId                        	ObjectName          	VERSION(LSN)    	Time               	Operation       
    TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000002	2025-07-18 16:52:08	OVERWRITE       
    
    OK
  • Lihat data cadangan tabel yang di-drop.

    Jalankan perintah SHOW HISTORY FOR TABLE table_name ('id'='xxxx');. Contoh:

    -- Perbarui data tabel 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);
    
    -- Hapus tabel test_restore_2.
    DROP TABLE test_restore_2;
    
    -- Konfirmasi penghapusan tabel test_restore_2.
    Confirm to "drop table test_restore_2;" (yes/no)? yes
    
    -- Lihat data cadangan tabel test_restore_2 yang di-drop.
    SHOW HISTORY FOR TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');

    Hasil berikut dikembalikan:

    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
  • Lihat data cadangan tabel partisi.

    Jalankan perintah SHOW HISTORY FOR TABLE table_name ('id'='xxxx'); untuk melihat data cadangan tabel partisi. Contoh:

    -- Buat tabel bernama test_restore_part_1.
    CREATE TABLE test_restore_part_1(colname string) PARTITIONED BY(ds string);
    
    -- Perbarui tabel 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");
    
    -- Lihat data cadangan tabel test_restore_part_1.
    SHOW HISTORY FOR TABLE test_restore_part_1('id'='fbee66b56cf544d2a9999d5d0ce5d352');

    Hasil berikut dikembalikan:

    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
  • Lihat data cadangan partisi.

    Jalankan perintah SHOW HISTORY FOR TABLE table_name partition_spec; atau

    SHOW HISTORY FOR TABLE table_name PARTITION('id'='xxxx'); untuk melihat data cadangan partisi. Contoh berikut menunjukkan rinciannya.

-- Lihat data cadangan partisi tertentu di tabel test_restore_part_1.
SHOW HISTORY FOR TABLE test_restore_part_1('id'='fbee66b56cf544d2a9999d5d0ce5d352') 
  PARTITION(ds='20250701') PARTITION(ds='20250702');

Hasil berikut dikembalikan:

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

Memulihkan tabel non-partisi

Bagian ini menjelaskan cara memulihkan tabel non-partisi di proyek test_restore.

  • Memulihkan tabel yang di-drop.

    Jalankan perintah RESTORE TABLE table_name ('id'='xxxxx');. Pastikan nama tabel yang ingin Anda pulihkan bersifat unik. Jika tabel lain memiliki nama yang sama, ubah terlebih dahulu namanya. Contoh pernyataan:

    -- Query data cadangan tabel test_restore_2 yang di-drop.
    SHOW HISTORY FOR TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');
    
    -- Buat tabel bernama test_restore_2.
    CREATE TABLE test_restore_2(colname string);
    
    -- Pulihkan tabel test_restore_2 yang di-drop. Namun, error dikembalikan karena sudah ada tabel dengan nama yang sama.
    RESTORE TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');
    
    -- Ganti nama tabel test_restore_2 yang ada.
    ALTER TABLE test_restore_2 rename TO test_restore_2_rename;
    
    -- Pulihkan tabel test_restore_2 yang di-drop.
    RESTORE TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');

    OK dikembalikan.

  • Memulihkan tabel ke versi tertentu. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.

    Jalankan perintah RESTORE TABLE table_name TO LSN 'xxxx';. Contoh pernyataan:

    -- Pulihkan tabel test_restore_1 ke LSN tertentu.
    RESTORE TABLE test_restore_1 TO LSN '0000000000000004';
    
    -- Query data tabel test_restore_1.
    SELECT * FROM test_restore_1;

    Hasil berikut dikembalikan:

    +------------+
    | colname    | 
    +------------+
    | 2          | 
    +------------+
  • Memulihkan tabel ke versi tertentu dan mengganti nama tabel, atau memperbarui data ke tabel dengan nama berbeda.

    Jalankan perintah RESTORE TABLE table_name TO LSN 'xxxx' AS new_table_name;.

    Ini mencakup tiga skenario berikut:

    • Memulihkan tabel ke versi tertentu dan mengganti nama tabel.

      -- Pulihkan tabel test_restore_2 yang di-drop ke LSN tertentu dan ganti nama tabel menjadi test_restore_new.
      RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new;
      
      -- Query data tabel test_restore_new.
      SELECT * FROM test_restore_new;

      Hasil berikut dikembalikan:

      +------------+
      | colname    | 
      +------------+
      | 1          | 
      +------------+
    • Memulihkan tabel ke versi tertentu dan memperbarui data ke tabel yang sudah ada dengan nama berbeda.

      -- Pulihkan tabel test_restore_2 ke versi tertentu dan simpan data ke tabel test_restore_new yang sudah ada.
      RESTORE TABLE test_restore_2 TO LSN '0000000000000005' AS test_restore_new;
      
      -- Query data cadangan tabel test_restore_new.
      SHOW HISTORY FOR TABLE test_restore_new;

      Hasil berikut dikembalikan:

      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
    • Memulihkan tabel ke versi tertentu dan memperbarui data ke tabel dengan nama dan skema berbeda. Operasi ini gagal karena kedua tabel harus memiliki skema yang sama. Contoh:

      -- Buat tabel dengan skema berbeda.
      CREATE TABLE test_restore_2cols(col1 string, col2 string);
      
      -- Pulihkan tabel test_restore_1 ke versi tertentu dan tulis data ke tabel test_restore_2cols.
      RESTORE TABLE test_restore_1 TO LSN '0000000000000005' AS test_restore_2cols;

      Hasil berikut dikembalikan:

      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"}]

Memulihkan tabel partisi dan partisi

Bagian ini menjelaskan cara memulihkan tabel partisi atau partisi di proyek test_restore.

  • Memulihkan tabel partisi.

    Jalankan perintah RESTORE TABLE table_name ('id'='xxxxx');. Contoh pernyataan:

    -- Buat tabel bernama test_restore_part_x.
    CREATE TABLE test_restore_part_x(a string) PARTITIONED BY(ds string);
    
    -- Perbarui tabel 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");
    
    -- Lihat partisi tabel test_restore_part_x.
    LIST PARTITIONS test_restore_part_x;
    
    -- Lihat data tabel test_restore_part_x.
    SELECT * FROM test_restore_part_x;
    
    -- Drop tabel test_restore_part_x.
    DROP TABLE test_restore_part_x;
    
    -- Konfirmasi operasi drop tabel.
    Confirm to "drop table test_restore_part_x;" (yes/no)? yes
    
    -- Pulihkan tabel test_restore_part_x.
    RESTORE TABLE test_restore_part_x('id'='94d436523fe14ba39f33d2dee738c018');
    
    -- Lihat data cadangan tabel test_restore_part_x.
    SHOW HISTORY FOR TABLE test_restore_part_x('id'='94d436523fe14ba39f33d2dee738c018');
    
    -- Lihat partisi tabel test_restore_part_x.
    LIST PARTITIONS test_restore_part_x;

    Hasil berikut dikembalikan:

    ds=20191201
    ds=20191202
    ds=20191203
    ds=20191204
    ds=20191205
    ds=20200101
    ds=20200102
  • Memulihkan partisi. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.

    Jalankan perintah RESTORE TABLE table_name PARTITION('id'='xxxx')[PARTITION('id'='xxxx')];. Contoh pernyataan:

    -- Buat tabel bernama test_restore_part_y.
    CREATE TABLE test_restore_part_y(a string) PARTITIONED BY(ds string);
    
    -- Perbarui tabel 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");
    
    -- Lihat partisi tabel test_restore_part_y.
    LIST PARTITIONS test_restore_part_y;
    
    -- Drop partisi dari tabel test_restore_part_y.
    ALTER TABLE test_restore_part_y DROP PARTITION(ds='20250701'),PARTITION(ds='20250702');
    
    -- Konfirmasi operasi drop partisi.
    Confirm to "alter table test_restore_part_y drop partition(ds='20250701'),partition(ds='20250702');" (yes/no)? yes
    
    -- Lihat partisi tabel test_restore_part_y.
    LIST PARTITIONS test_restore_part_y;
    
    -- Lihat ID partisi tabel test_restore_part_y.
    SHOW HISTORY FOR TABLE test_restore_part_y;
    
    -- Pulihkan partisi tabel test_restore_part_y.
    RESTORE TABLE test_restore_part_y PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa') PARTITION('id'='8c85184ec0b44fba8198274401df2519');
    
    -- Lihat partisi tabel test_restore_part_y.
    LIST PARTITIONS test_restore_part_y;

    Hasil berikut dikembalikan:

    ds=20250101
    ds=20250102
    ds=20250701
    ds=20250702
    ds=20250703
    ds=20250704
    ds=20250705
    ds=20250706
  • Memulihkan partisi ke versi tertentu. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.

    Jalankan perintah RESTORE TABLE table_name partition_spec1[partition_spec2] to LSN 'xxxx';. Contoh pernyataan:

    -- Perbarui data tabel 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");
    
    -- Lihat data partisi tertentu di tabel test_restore_part_y.
    SELECT * FROM test_restore_part_y WHERE ds='20250701' or ds='20250702';
    
    -- Pulihkan partisi tertentu di tabel test_restore_part_y ke LSN tertentu.
    RESTORE TABLE test_restore_part_y PARTITION(ds='20250701') PARTITION(ds='20250702') to LSN '0000000000000010';
    
    -- Lihat data partisi tertentu di tabel test_restore_part_y.
    SELECT * FROM test_restore_part_y WHERE ds='20250701' or ds='20250702';

    Hasil berikut dikembalikan:

    -- Query pertama mengembalikan hasil berikut.
    +------------+------------+
    | a          | ds         | 
    +------------+------------+
    | 20250701_v2 | 20250701   | 
    | 20250702_v2 | 20250702   | 
    +------------+------------+
    
    -- Query kedua mengembalikan hasil berikut.
    +------------+------------+
    | a          | ds         | 
    +------------+------------+
    | 2          | 20250702   | 
    | 1          | 20250701   | 
    +------------+------------+
  • Memulihkan partisi ke versi tertentu dan mengganti nama tabel. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.

    Jalankan perintah RESTORE TABLE table_name partition_spec1[partition_spec2] to LSN 'xxxx' as new_table_name;. Contoh pernyataan:

    -- Pulihkan partisi ke LSN tertentu dan beri nama tabel baru 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;
    
    -- Lihat data tabel test_restore_part_y_v10.
    SELECT * FROM test_restore_part_y_v10 WHERE ds='20250701' or ds='20250702';

    Hasil berikut dikembalikan:

    +------------+------------+
    | a          | ds         | 
    +------------+------------+
    | 1          | 20250701   | 
    | 2          | 20250702   | 
    +------------+------------+

Contoh Tabel Delta

-- Buat tabel.
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';

-- Hasil berikut dikembalikan. 
+------------+------------+------------+------------+
| pk         | val        | dd         | hh         | 
+------------+------------+------------+------------+
| 1          | 1          | 01         | 01         | 
| 4          | 4          | 01         | 01         | 
| 5          | 5          | 01         | 01         | 
| 2          | 2          | 01         | 01         | 
| 3          | 30         | 01         | 01         | 
+------------+------------+------------+------------+

-- Pulihkan tabel. Anda dapat memperoleh 'table_id' dengan menjalankan perintah DESC EXTENDED table.
DESC EXTENDED mf_dt;
-- Hasil berikut dikembalikan. 
+------------------------------------------------------------------------------------+
| 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';

-- Hasil berikut dikembalikan. 
+------------+------------+------------+------------+
| pk         | val        | dd         | hh         | 
+------------+------------+------------+------------+
| 1          | 1          | 01         | 01         | 
| 4          | 4          | 01         | 01         | 
| 5          | 5          | 01         | 01         | 
| 2          | 2          | 01         | 01         | 
| 3          | 30         | 01         | 01         | 
+------------+------------+------------+------------+

-- Pulihkan partisi. Anda dapat memperoleh 'partition_id' dengan menjalankan perintah SHOW HISTORY FOR TABLE.
SHOW HISTORY FOR TABLE mf_dt;

-- Hasil berikut dikembalikan. 
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';

-- Hasil berikut dikembalikan. 
+------------+------------+------------+------------+
| pk         | val        | dd         | hh         | 
+------------+------------+------------+------------+
| 1          | 1          | 01         | 01         | 
| 4          | 4          | 01         | 01         | 
| 5          | 5          | 01         | 01         | 
| 2          | 2          | 01         | 01         | 
| 3          | 30         | 01         | 01         | 
+------------+------------+------------+------------+

-- Lakukan query perjalanan waktu pada tabel yang dipulihkan.
SELECT * FROM mf_dt version AS OF 2 WHERE dd = '01' AND hh = '01';

-- Hasil berikut dikembalikan. 
+------------+------------+------------+------------+
| 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';

-- Hasil berikut dikembalikan. 
+------------+------------+------------+------------+
| pk         | val        | dd         | hh         | 
+------------+------------+------------+------------+
| 1          | 1          | 01         | 01         | 
| 4          | 4          | 01         | 01         | 
| 5          | 5          | 01         | 01         | 
| 2          | 2          | 01         | 01         | 
| 3          | 30         | 01         | 01         | 
+------------+------------+------------+------------+